我已经阅读了很多关于此的问题,但无法找到正确的解决方案...问题是我创建了一个虚拟AsyncTask
,当它运行时,我旋转屏幕,AsyncTask突然停止
所以我无法保存其状态,以便当屏幕旋转时,它仅从该状态恢复
我无法使用此解决方案,因为我没有使用片段: - http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
另外,我不希望任何解决方案说在Async运行时锁定你的屏幕方向
public class MainActivity extends Activity{
//Some Code
ProgressDialog progressDialog; // Global Variable
//OnCreateMethod Here
//.......
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DummyTask dt = new DummyTask();
dt.execute();
}
private class DummyTask extends AsyncTask<Void, Integer, Void> {
@Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(context);
progressDialog.setTitle("Processing...");
progressDialog.setMessage("Please wait.");
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
}
@Override
protected Void doInBackground(Void... ignore) {
try{
Thread.sleep(3000);
}
catch(Exception e){}
return null;
}
@Override
protected void onPostExecute(Void ignore) {
if (progressDialog!=null) {
pd.dismiss();
}
Toast.makeText(getApplicationContext(),"Running",Toast.LENGTH_SHORT).show();
}
}
答案 0 :(得分:1)
有几种方法可以使用AsyncTask
和配置更改。我会说你基本上有两种选择:
Activity
经历了销毁生命周期事件),您取消AsyncTask
并在创建新Activity
时重新启动它们请参阅#2的CommonsWare示例:https://github.com/commonsguy/cw-android/blob/master/Rotation/RotationAsync/src/com/commonsware/android/rotation/async/RotationAsync.java
答案 1 :(得分:0)
根据您的要求,使用Service
可以是更好的实施方式:
public class DownloaderService extends Service {
private LongRunningAsyncTask task = null;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Start task
task = new LongRunningAsyncTask();
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
您可以从Service
开始Activity
:
Intent intent = new Intent(this, DownloaderService.class);
startService(intent);
您甚至可以多次调用startService,它将始终转到相同的DownloaderService
实例。因此,如果一个人已经在运行,请确保您不启动AsyncTask
。与任何Activity
进行通信的一种方法是使用广播。
此外,即使您没有使用Service
,也要确保了解不同的Android版本执行AsyncTask
的方式。请阅读: