当应用程序空闲(被android系统杀死)后恢复时,在片段中找不到活动中设置的静态变量,导致应用程序崩溃
我在异步任务的MainActivity中将该值设置为自定义类型CustomData的静态变量。这是一个密集的操作,用于下载json并在此对象中设置其值。以下是我在MainActivity中设置它的方式当应用程序空闲(被android系统杀死)后恢复时,在片段中找不到活动中设置的静态变量,导致应用程序崩溃,android,android-fragments,android-asynctask,static,Android,Android Fragments,Android Asynctask,Static,我在异步任务的MainActivity中将该值设置为自定义类型CustomData的静态变量。这是一个密集的操作,用于下载json并在此对象中设置其值。以下是我在MainActivity中设置它的方式 public class MainActivity extends BaseActivity { private static CustomData paper; @Override protected void onCreate(Bundle savedInstanceState) {
public class MainActivity extends BaseActivity {
private static CustomData paper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View contentView = inflater.inflate(R.layout.activity_main, null, false);
new Loadpaper().execute(this);
}
public class Loadpaper extends AsyncTask<Activity, Void, String> {
@Override
protected void onPreExecute()
{
}
@Override
protected String doInBackground(Activity... params) {
paper = getNewsPaper(params[0]);
return "success";
}
@Override
protected void onPostExecute(String result){
setpagecount();
return ;
}
public CustomData getpaperdata() {
return paper;
}
}
在通常情况下,它可以正常工作,甚至在应用程序暂停(但未销毁)时也可以正常工作。但在空闲一段时间后,如果我尝试恢复应用程序。系统尝试按原样重新加载屏幕,但变量paper现在为空,因此应用程序崩溃
我读过这篇文章,还做了一些调试,知道当活动终止时,静态变量将变为null,这就发生了。如何修复它,使resume上的片段仅在主活动的asynctask完成并且设置了变量值时才调用这些方法 让片段实现接口
接口A{done();}
。。。让活动在B的实现中实现接口B{registerA(aa);unregisterA(aa);}
使用arraylistregisterdas代码>。。。现在在onPostExecute
中迭代registerdAs
并调用done()。。。并在片段do((B)getActivity)的附件中注册(this)
并在附件中注销它。。。当然这是基本的想法。。。如果异步任务在注册之前完成,您还应该在register
方法中调用A.done()
。。。下一步是。。。将done()
更改为done(CustomData数据)
let Fragment实现接口接口A{done();}
。。。让活动在B的实现中实现接口B{registerA(aa);unregisterA(aa);}
使用arraylistregisterdas代码>。。。现在在onPostExecute
中迭代registerdAs
并调用done()。。。并在片段do((B)getActivity)的附件中注册(this)
并在附件中注销它。。。当然这是基本的想法。。。如果异步任务在注册之前完成,您还应该在register
方法中调用A.done()
。。。下一步是。。。将done()
更改为done(自定义数据)
paper = ((MainActivity) myActivity).getpaperdata();