我有一个ActivityA,它有一个Button.点击按钮后,它会打开另一个ActivityB.
在ActivityB的onCreate()方法中,我启动AsyncTask,它连接到服务器并获取结果并将其显示在屏幕上.
这是活动代码B:
public class ActivityB extends Activity { AsyncFetch asyncFetch; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(null != savedInstanceState) { return; } asyncFetch = new AsyncFetch(); asyncFetch.execute(); } } private class AsyncFetch extends AsyncTask<Object,Void,Object> { @Override protected void onPostExecute(Object o) { } @Override protected Object doInBackground(Object... params) { //contacts the http server. } }
在执行AsyncFetch时,当我回击时,ActivityB不会立即被销毁.但是在AsyncTask完成后会被破坏.
如何实现这一点以避免反压冻结?我试过以下:
@Override protected void onDestroy() { asyncFetch.cancel(true); super.onDestroy(); }
但它仍然等待AsyncTask取消或完成.
像GMail应用程序,当我打开一些东西.在这个过程中,如果我按下后退按钮,它就会从该活动中消失.
有没有其他方法来实现后台进程?任何设计模式来实现这个?请告诉我.
任何帮助表示赞赏.
解决方法
只需处理自己的onBackPressed()方法:
@Override public void onBackPressed() { if (asyncFetch != null) asyncFetch.cancel(true); super.onBackPressed(); }