我启动AsyncTask
并将Context
放在任务的构造函数中。
在onPostExecute
我想知道我的活动现在是否处于活动状态并且未重新创建。怎么做更好?
为此,我可以:
在onCreate
活动中创建randomNumber,然后将其放入Application
类;
onPause / onDestroy将randomNumber设置为0并在onResume
中恢复randomNumber;
在onPreExecute()
中获取randomNumber并在onPostExecute
中将randomNumber与应用randomNumber进行比较。
可能我可以使用Context做出决定......?
答案 0 :(得分:0)
有很多方法可以检查活动是否仍在那里。
我通常使用以下结构创建SkeletonActivity
:
public class SkeletonActivity extends FragmentActivity {
private boolean paused = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
paused = false;
}
@Override
public void onPause() {
super.onPause();
paused = true;
}
@Override
public void onResume() {
super.onResume();
paused = false;
}
@Override
public void onStart() {
super.onStart();
paused = false;
}
public boolean isPaused() {
return paused;
}
}
现在让您的所有活动扩展此SkeletonActivity
。最后更改此基类以根据需要更改暂停标志(例如,在onDestroy()
中更新它
另一种方法是在SkeletonActivity
:
public class SkeletonActivity extends FragmentActivity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
}
@Override
protected void onDestroy() {
mContext = null;
super.onDestroy();
}
public boolean isPaused() {
return mContext==null;
}
}
答案 1 :(得分:0)
请看一下这个例子。我将Context存储在AsyncTask中。在onRetainNonConfigurationInstance()期间,我将其设置为null,在onCreate()期间,我将Context修补到当前运行的Activity。你可以通过设置" task = null"来增强它。在onDestroy():
public class MyActivity extends Activity {
/* package */ MyActivity context;
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
public MyAsyncTask(final MyActivity context) {
super();
this.context = context;
}
@Override
protected Cursor doInBackground(/* ... */) {
// ...
}
@Override
protected void onPostExecute(/* ... */) {
if (context != null) {
// ...
}
}
@Override
protected void onPreExecute (/* ... */) {
// ...
}
}
/* package */ MyAsyncTask task;
@Override
public void onCreate(final Bundle bundle) {
// ...
Bundle bundleExtras = getIntent().getExtras();
if (bundleExtras != null) {
task = (MyAsyncTask) getLastNonConfigurationInstance();
if (task != null) {
task.context = this;
// ...
} else {
task = new MyAsyncTask(this);
task.execute();
}
}
}
@Override
public Object onRetainNonConfigurationInstance() {
if (task != null) {
// ...
task.context = null;
}
return task;
}
}
答案 2 :(得分:0)
对其他人来说,这将是完全有用的。
如果按下主页按钮或后退按钮onStop()将被调用。所以在活动中声明一个变量,如
boolean isActivityclosed=false;
在onStop()方法中将值设置为true。
@Override
protected void onStop() {
super.onStop();
isActivityclosed=true;
}
现在,在postExcecute方法中检查变量是否为真。如果它是真的那么你的活动就在后台。