2015-11-26 5 views
0

Я наткнулся на ниже ApplicationManager класс в чей-то код. Этот класс в основном ведет список всех запущенных действий.Каково использование списка всех видов деятельности в приложении для Android?

Я проверил тщательно и обнаружили, что этот класс используется только в 2 ниже обстоятельств:

  1. в oncreate() каждых activity: ApplicationManager.getInstance().addActivity(this); добавить деятельность начала списка.
  2. ApplicationManager.getInstance().applicationExit(); призван завершить каждое действие в списке, когда приложение закрыто.

Итак, вот мой вопрос ... Это действительно необходимо? Что делать, если я этого не делаю, что является следствием? Будет ли активность в приложении по-прежнему занимать память после закрытия приложения?

Спасибо!

public class ApplicationManager { 
    private List<Activity> activityList = new LinkedList<Activity>(); 
    private static ApplicationManager appManager; 

    /** 
    * singleton 
    */ 
    public static ApplicationManager getInstance(){ 
     if(appManager == null){ 
      synchronized (ApplicationManager.class) { 
       if(appManager == null){ 
        appManager = new ApplicationManager(); 
       } 
      } 
     } 
     return appManager; 
    } 

    /** 
    * add Activity 
    */ 
    public void addActivity(Activity activity){ 
     activityList.add(activity); 
    } 


    /** 
    * application exit 
    */ 
    public void applicationExit(){ 
     if(WPApplication.DEBUG){ 
      Log.i("applicationExit", "alist:" + activityList.size()); 
     } 
     while(activityList.size() > 0){ 
      if(WPApplication.DEBUG){ 
       Log.i("applicationExit", "remove--"); 
      } 
      activityList.get(0).finish(); 
      activityList.remove(0); 
     } 
    } 

} 
+0

Нет его не требуется. Класс приложения будет примером Singleton для вашего приложения. Вы можете получить весь текущий список операций с помощью диспетчера пакетов. –

+0

Приложение может течь память во время работы, но когда оно закрыто, память возвращается ОС. Единственной «памятью, используемой приложением» после закрытия, может быть ПЗУ в файле журнала Android. – hdl

ответ

0

Вы можете управлять жизненным циклом приложения. Независимо от того, сколько действий открыто одновременно, вы можете закрыть приложение с помощью applicationExit().

1

№ Никогда Никогда не делайте этого.

Это всего лишь рецепт утечек памяти. Система Android может отключить любую активность в любое время, и этот класс будет хранить для них все, независимо от того, существуют они или нет.

сбор мусора будет не работать, потому что ручки держат объекты «живыми»

Также рассмотреть это:

Поворот устройства вызывает активность перезапустить (снова вызывая его OnCreate). Каждый раз, когда вы поворачиваете устройство, активность будет воссоздана, а новый указатель добавлен в список. Все остальные указатели на одну и ту же деятельность практически мертвы, но занимают память. Каждый вид внутри каждого отдельного действия будет сохранен в живых, так как их контекст (активность) все еще хранит ссылки.

Возможно, на самом деле у вас не хватает памяти, просто вращая устройство.

+0

Что делать, если у него был метод removeActivity()? – hdl

0

Не делайте этого, единственное преимущество на вашем образце - убить все действия сразу.

Сценарий очень редок и не рекомендуется в большинстве случаев.

Если вы действительно хотите сделать это, вы не можете позвонить Process.killProcess(android.os.Process.myPid());

+0

Это противоречит жизненному циклу Android-активности и почти никогда не нужно делать. – Kuffs

+0

Невозможно, чтобы приложение запускало дочерние процессы и делало их лидерами сеанса, что приводило к убийству всего, кроме новорожденных и независимых процессов (ака-демонов)? – hdl

+0

Я согласен с тобой. – Jintin

Смежные вопросы