繁体   English   中英

如果应用程序闲置了数小时并被OS破坏,是否在Activity.onResume之前调用Application.onCreate?

[英]Is Application.onCreate called before Activity.onResume if app has been idle for hours and destroyed by OS?

在我的Application onCreate中,我以如下方式实例化Retrofit:

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        RestClient.setupRestClient(getAppVersion(this));
    }


}

我曾经在RestClient中有一个静态块来对其进行初始化,但是现在我需要为每个请求在Headers中添加应用程序版本,因此我需要在初始化时传递String。 (getAppVersion()需要上下文来获取应用程序版本)

如果尚未初始化,我在RestClient.get()中添加了throw子句。

我的问题是,通常,如果一个Activity闲置数小时,操作系统会杀死它,有时在长时间闲置后恢复活动时,它在onResume中寻找的某些内容为null并崩溃,因此在onResume之前调用Application.onCreate ,活动是否事先被杀死?

这是我的RestClient类

public class RestClient {

    private static API REST_CLIENT;

    private RestClient() {
    }

    public static API get() {
        if(REST_CLIENT==null){
            throw new IllegalStateException("Rest Client not initialized");
        }
        return REST_CLIENT;
    }

    public static void setupRestClient(final String appVersion) {

        Gson gson = new GsonBuilder()
                .registerTypeAdapter(Story.class, new StorySerializer())
                .create();


        RequestInterceptor requestInterceptor = new RequestInterceptor() {
            @Override
            public void intercept(RequestFacade request) {
                request.addHeader(ServerKeys.HEADER_OS_VERSION, ServerKeys.HEADER_OS_VERSION_VALUE_ANDROID);
                request.addHeader(ServerKeys.HEADER_APP_VERSION, appVersion);
            }
        };

        RestAdapter.Builder builder = new RestAdapter.Builder();
        builder.setEndpoint(APIKeys.API_ROOT);
        builder.setRequestInterceptor(requestInterceptor);
        builder.setExecutors(Executors.newFixedThreadPool(Preferences.MAX_NUMBER_OF_PARALLEL_NETWORK_OPERATIONS), new ScheduledThreadPoolExecutor(Preferences.MAX_NUMBER_OF_PARALLEL_NETWORK_OPERATIONS));
        builder.setConverter(new GsonConverter(gson));
        RestAdapter restAdapter = builder.build();
        REST_CLIENT = restAdapter.create(API.class);
    }

}

这就是我的用法:

RestClient.get().resetUserPassword(ge....

如果您的活动被杀死,则接下来将对该活动调用onCreate。 据我所知,该应用程序的onCreate()仅被调用一次。

这样的例子:我启动了我的应用程序,并且改变了方向,仅针对该Activity调用onDestroy和onCreate。 该应用程序从未重启。

因此,现在回答您的问题,因为我已经仔细阅读了,所以我认为不会。 除非关闭了整个应用程序,否则没有理由再次调用该应用程序的onCreate()。

正如塞尔文在评论中说的那样,对这个问题的直接回答是“是”。 但是,我的整个案例都是无效的,因为有一种更轻松的方法可以解决我遇到的问题,而无需将上下文传递给Retrofit,方法如下:

String verName = BuildConfig.VERSION_NAME;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM