Является ли хорошей практикой начинать занятие методом stati c из другого занятия? - PullRequest
3 голосов
/ 16 января 2020

Я видел это как обычную практику начинать деятельность с использованием метода stati c, подобного этому

class HomeScreenActivity{
  ....
  ....

  public static void startHomeActivity(Context context){
    Intent intent = new Intent(context,HomeScreenActivity.class);
    activity.startActivity();
  }
  ....
  ....

}


class LoginActivity{
  ....
  ....

  public void startActivity(){
    HomeScreenActivity.start(this);
  }    
  ....
  ....
}

Это хорошая практика, может ли она вызвать утечки памяти, какие проблемы она может создать

1 Ответ

2 голосов
/ 16 января 2020

Это не плохая практика, если это то, о чем вы спрашиваете.

Что плохая практика, например, наличие переменной контекста в поле stati c, это создаст протечь. Например:

public class App extends Application {
    private static Context mContext;

    public static Context getContext() {
        return mContext;
    }


    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this

    }
}

Это плохая практика. И android студия должна предупредить вас (stati c контекстные поля). Это может быть решено, например, с помощью WeakReference.

Но так как метод вашего примера - stati c, а контекст предоставляется в качестве аргумента, в этом нет ничего плохого. Если вы хотите, чтобы метод был stati c, рекомендуется передавать объект действия / контекста в качестве параметра.

Если вы подозреваете, что есть утечка, вы можете переопределить метод onDestroy этого контекста, чтобы выяснить, когда есть утечка (onDestroy не будет вызван, так как на него все еще есть ссылка). Также, утечки могут быть найдены с помощью Memory Profiler и / или библиотеки LeakCanary.

...