Перейти к содержанию
Fire Monkey от А до Я
  • 0

Занимаемая приложением память


Major

Вопрос

Рекомендуемые сообщения

  • 0
3 часа назад, Yarpda сказал:

Есть специальные программы для этого. Я пользовался Quick System info. И да, результат Вам вряд ли  понравится... )))

а шо там такого страшного будет?)

Ссылка на комментарий
  • 0

после того как я получил список процессов (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
  • Модераторы

Если грубо, то примерно вот так:

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;

 

Повторюсь, это грубый, но рабочий пример. Рекомендуется доработать его перед использованием в рабочем проекте!

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...