假设我有两个正在运行的应用程序A& B在API级别8设备上。
从A开始,我开始一个开始长时间运行解压缩过程的活动(假设大约有4场演出)。我在ProgressDialog中显示了这个进展。
同时,通过手动操作,操作会导致B响应并使用ProgressDialog将活动推离屏幕(调用onStop)。 我执行了一些操作,当我完成时,我隐藏了B的活动。 这样A的活动就会出现在屏幕上(调用onResume)。
然而,即使长时间运行的进程仍在运行,ProgressDialog也不见了。调用OnStop后,我的ProgressDialog是如何消失的?为什么它不会在我的OnResume中重新出现?
据推测,活动的背景已经改变,因此在活动背景下调用的ProgressDialog也不见了。但是由于长时间运行的进程仍在运行并处于正常工作状态,因此我应该能够获得ProgressDialog的相同实例。 但是只是调用.show()将无效。
请注意,功能在单个应用程序中正常运行。当两个应用程序相互争斗时,这纯粹是个问题。
答案 0 :(得分:0)
仅在状态还原之间不保留对话框,如果您希望系统还原对话框,则需要使用DialogFragment。
答案 1 :(得分:0)
您可以通过解压缩过程发送广播,并在活动中注册一个显示进度对话框的广播接收器。
如果您想使用对话框片段方法,可以使用与早期Android版本向后兼容的support library
或者只是显示隐藏对话框,具体取决于活动生命周期:
public class MainActivity extends Activity {
private ProgressDialog mDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDialog=new ProgressDialog(this);
}
@Override
protected void onResume() {
super.onResume();
mDialog.show();
}
@Override
protected void onStop() {
super.onStop();
mDialog.hide();
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mDialog!=null){
mDialog.dismiss();
}
}
}