Является ли хорошей практикой начинать действие с использованием статического метода из другого действия?

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

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 ответ


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

Плохой практикой является, например, наличие контекстной переменной в статическом поле, что может привести к утечке. Например:

public class App extends Application {
    private static Context mContext;

    public static Context getContext() {
        return mContext;
    }


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

    }
}

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

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

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


Есть идеи?

10000