Major Опубликовано 17 января, 2017 Поделиться Опубликовано 17 января, 2017 Как определить, сколько оперативной памяти на мобильнике занимает программа? Ссылка на комментарий
0 Yarpda Опубликовано 18 января, 2017 Поделиться Опубликовано 18 января, 2017 Есть специальные программы для этого. Я пользовался Quick System info. И да, результат Вам вряд ли понравится... ))) Ссылка на комментарий
0 Major Опубликовано 18 января, 2017 Автор Поделиться Опубликовано 18 января, 2017 3 часа назад, Yarpda сказал: Есть специальные программы для этого. Я пользовался Quick System info. И да, результат Вам вряд ли понравится... ))) а шо там такого страшного будет?) Ссылка на комментарий
0 Major Опубликовано 19 января, 2017 Автор Поделиться Опубликовано 19 января, 2017 после того как я получил список процессов (getRunningAppProcesses), а потом PID отдельного процесса, нужно воспользоваться ActivityManager.getProcessMemoryInfo. Он возвращает массив JDebug_MemoryInfo. А как дальше с ним работать? Прошу помощи!( вот мой код: function GetActivityManager: JActivityManager; var LJO: JObject; begin LJO := SharedActivity.getSystemService(TJContext.JavaClass.ACTIVITY_SERVICE); if not Assigned(LJO) then raise Exception.Create('Can not Access Activity Service!') else Result := TJActivityManager.Wrap((LJO as ILocalObject).GetObjectID); end; procedure ListProcesses; var LJL: JList; LIterator: JIterator; LJAR: JActivityManager_RunningAppProcessInfo; ListBoxItem: TListboxItem; PID: Integer; begin LJL := GetActivityManager.getRunningAppProcesses; if Assigned(LJL) then begin LIterator := LJL.iterator; while LIterator.hasNext do begin LJAR := TJActivityManager_RunningAppProcessInfo.Wrap ((LIterator.next as ILocalObject).GetObjectID); ListBoxItem := TListboxItem.Create(Form1.ListBox1); ListBoxItem.Height := 50; ListBoxItem.Text := JStringToString(LJAR.processName); PID := LJAR.PID; ListBoxItem.ItemData.Detail := IntToStr(PID); // GetActivityManager.getProcessMemoryInfo (); Form1.ListBox1.AddObject(ListBoxItem); end; end; end; Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 19 января, 2017 Модераторы Поделиться Опубликовано 19 января, 2017 Если грубо, то примерно вот так: uses Androidapi.JNI.App, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os, Androidapi.JNIBridge; function IntArrayToJArray(const OrigArray: array of Integer): TJavaArray<Integer>; var I: Integer; begin Result := TJavaArray<Integer>.Create(Length(OrigArray)); for I := Low(OrigArray) to High(OrigArray) do Result.Items[I] := OrigArray[I]; end; procedure TForm3.Button1Click(Sender: TObject); var ActivityManager: JActivityManager; List: JList; Iterator: JIterator; Process: JActivityManager_RunningAppProcessInfo; ArrayMemoryInfo: TJavaObjectArray<JDebug_MemoryInfo>; begin ActivityManager := TJActivityManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.ACTIVITY_SERVICE)); List := ActivityManager.getRunningAppProcesses; Iterator := List.iterator; while Iterator.hasNext do begin Process := TJActivityManager_RunningAppProcessInfo.Wrap(Iterator.next); ArrayMemoryInfo := ActivityManager.getProcessMemoryInfo(IntArrayToJArray([Process.pid])); Memo1.Lines.Add(JStringToString(Process.processName) + ' ' + ArrayMemoryInfo[0].getTotalSharedDirty.ToString); end; end; Повторюсь, это грубый, но рабочий пример. Рекомендуется доработать его перед использованием в рабочем проекте! Major, Brovin Yaroslav и Равиль Зарипов (ZuBy) 3 Ссылка на комментарий
0 Major Опубликовано 20 января, 2017 Автор Поделиться Опубликовано 20 января, 2017 спасибо, попробую! Ссылка на комментарий
0 Major Опубликовано 20 января, 2017 Автор Поделиться Опубликовано 20 января, 2017 Андрей, ваш код работает и показывает, что даже полупустое firemonkey-приложение занимает в памяти места больше, чем всё остальное Ссылка на комментарий
Вопрос
Major
Как определить, сколько оперативной памяти на мобильнике занимает программа?
Ссылка на комментарий
6 ответов на этот вопрос
Рекомендуемые сообщения