0

一位客户在使用任务杀手杀死应用程序后向我发送了关于我的应用程序强制在启动时关闭的反馈。我告诉他任务杀手是危险的,对手机性能没有任何好处,因为 Android 不会像 Windows 那样管理 RAM,但他不会卸载 Task Killer。

强制关闭是这样的:

A) 用户正常使用我的应用

B)用户任务杀死我的应用程序

C)用户再次启动我的应用程序

D) 启动时强制关闭

E) 用户再次启动我的应用程序

F)一切都按预期工作

我发现问题是我的静态对象变为空,因为它们从 RAM 中清除,导致 NullPointerExceptions 强制关闭应用程序。但是,我有很多地方可以访问这些静态对象(如果不是这种情况,我什至不会使用静态对象),因此 NullPointerExceptions 可能会在很多地方发生。

此行为仅在 Android 2.3.7 或更低版本中发生。Android 4.0 自己的任务杀手(你可以通过长按 Home 访问的那个)正确地杀死应用程序,然后在没有任何强制关闭的情况下启动它。

我该如何规避这种行为?

4

1 回答 1

0

我解决了。

该解决方案不是最佳的,但它有效:

我创建了一个这样的界面:

public interface StaticAccessTo<T>{
    public void returnStatic(T object);
}

我没有为我的静态对象使用吸气剂,而是:

public void getWhatever(StaticAccessTo<Whatever> callback){
    if (whatever == null){
        loadWhateverFromServer(callback);
    } else {
        callback.returnStatic(whatever);
    }
}

private void loadWhateverFromServer(StaticAccessTo<Whatever> callback){
    new AsyncTask<Void,Void,Void>(){

    public Void doInBackground(Void... params){
        whatever = loadWhatever();
        return null;
    }

    public void onPostExecute(Void result){
        callback.returnStatic(whatever);
    }

    }.execute();
}

因此,如果whatever不为 null,它将returnStatic(whatever)立即调用并可以whatever在主线程中访问。否则,它将自动从网络加载它并 returnStatic(whatever)在加载时从主线程调用。

于 2013-02-01T12:37:41.693 回答