有許多方法來檢查活動是否仍然存在。
我通常用以下結構創建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
一個Context實例:
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;
}
}
第一種方法。我怎麼能從'公共類TaskGetOrderPay擴展AsyncTask'從'isPaused()'...中獲取值? 第二種方法。在'doInBackground'中我使用上下文,因此設置'mContext = null;'會導致NullPoinException。 – Sviatoslav
如果它是一個單獨的java文件中的AsyncTask,那麼您應該傳遞對SkeletonActivity的引用。但是,如果它在你的Activity中,你可以檢查'if(isPaused())'。在第二種方法中,您還應該在使用上下文之前檢查「if(isPaused())」。順便說一句,我使用第一種方法:布爾標誌更安全 –
你認爲,對活動的引用 - 是一種好方法嗎? – Sviatoslav