【发布时间】:2014-10-17 08:35:23
【问题描述】:
我有一个ActivityA,它有一个按钮。单击button 后,会打开另一个ActivityB。
ActivityB 的onCreate() 方法,我正在启动AsyncTask,它连接到服务器并获取结果并将其显示到屏幕上。
这是Activity 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 应用程序,当我打开某些东西时。在此过程中,如果我按下返回按钮,它就会从Activity 中出来。
还有其他实现后台进程的方法吗?任何design pattern 来实现这个?请告诉我。
感谢任何帮助。
【问题讨论】:
-
即使按下后键,您是否仍需要来自服务器的响应??
-
如果实现正确,AsyncTasks 不会阻塞 UI 线程。发布您的完整代码。
-
UI 未被阻止。但在异步完成之前,Activity 不会被销毁。
-
比你如何体验“后按冻结”?
-
我经历过,直到异步完成,活动才关闭。
标签: android android-activity android-asynctask