2

如果我做这样的事情:

public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //init something else here if you want
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        //terminate something else here if you want
    }

}

并在 Manifest 文件中包含此类的名称,如下所示:

<application
        android:name="com.packagename.MyApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

这是否有效地为我们提供了一种在应用程序运行之前和之后运行我们想要的任何代码的方法?

编辑:如果我进入onCreate()语句,我会在代码中看到:

/**
     * Called when the application is starting, before any activity, service,
     * or receiver objects (excluding content providers) have been created.
     * Implementations should be as quick as possible (for example using 
     * lazy initialization of state) since the time spent in this function
     * directly impacts the performance of starting the first activity,
     * service, or receiver in a process.
     * If you override this method, be sure to call super.onCreate().
     */
    @CallSuper
    public void onCreate() {
    }

    /**
     * This method is for use in emulated process environments.  It will
     * never be called on a production Android device, where processes are
     * removed by simply killing them; no user code (including this callback)
     * is executed when doing so.
     */
    @CallSuper
    public void onTerminate() {
    }

编辑 2:我还可以将应用程序上下文保存为全局静态变量:

public class MyApp extends Application {
    private static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        MyApp.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return MyApp.context;
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
    }
}
4

2 回答 2

2

不是之前和之后,而是在整个Application生命周期中,例如所有正在运行Activity的 s、Services 和其他上下文生物……如果它们当前都不可见/正在运行的 Android 系统可能总是将您Application从内存中删除(用户也是)。

如果您正在寻找一种在屏幕外/没有任何 UI 的情况下运行某些代码的方法,请查看Service类或其他基于延迟警报的方法。

你不能依赖子Application类,因为你甚至不知道它什么时候被操作系统“自动”杀死。

于 2016-08-17T20:14:09.367 回答
1

是的。让它扩展应用程序类的主要原因

  • 是让所有你想在整个应用程序中成为单例并在组件中使用的初始化。
  • 有一些静态变量可以跨组件使用

参考:我们应该使用的逻辑

于 2016-08-17T20:17:03.210 回答