如何防止Android应用程序在后台时显示对话框

时间:2017-07-06 09:56:38

标签: android android-dialogfragment android-dialog

我开始在后台线程中下载/上传文件,并在操作失败时最终显示一个对话框。

对于正在下载/上传的情况,可以将应用转到后台,网络可能会关闭或可能会暂时断开连接。如果我在应用程序处于后台时尝试显示对话框,我将收到以下崩溃。

W/System.err(10235): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
E/ConnectivityService( 455): EVENT_NETWORK_INFO_CHANGED from unknown NetworkAgent
D/ConnectivityService( 455): setProvNotificationVisibleIntent: E visible=false networkType=0 extraInfo=null
W/System.err(10235): at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1842)
W/System.err(10235): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1860)
W/System.err(10235): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:650)
W/System.err(10235): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:609)
W/System.err(10235): at android.support.v4.app.DialogFragment.show(DialogFragment.java:143)
W/System.err(10235): at android.os.AsyncTask.finish(AsyncTask.java:636)
W/System.err(10235): at android.os.AsyncTask.access$500(AsyncTask.java:177)
W/System.err(10235): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask)

我当然希望避免这种情况在应用程序处于后台时显示对话框。该对话框应显示应用程序何时恢复。如何在不需要设置布尔标志的情况下优雅地执行此操作。

我不想检查应用当前是否处于后台。当应用再次登陆后台时,我只打算自动显示对话框。

1 个答案:

答案 0 :(得分:0)

...... 以前在后台检查应用程序的代码(已被删除).....

如果app在后台,此方法将返回true 显示您可以使用此结果显示对话框

if(!isAppIsInBackground(context)){
  //show the dialog
}else{
  //Do as you need 
}

修改

您可以使用活动作为对话框显示这样的对话框

1。创建活动

public class DialogActivity extends Activity {

String message = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_dialog);


    message = getIntent().getStringExtra("message");
    if(message!=null) {
        displayAlert(message);
    }
}


 private void displayAlert(String msg)
 {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Network alert!");
    builder.setMessage(msg)
            .setCancelable(false)
            .setPositiveButton("OK",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    finish();
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
 }
}

2。从Menifest编辑活动Theam

    <activity android:name=".DialogActivity"
              android:theme="@android:style/Theme.Holo.Light.Dialog">
    </activity>

3。将此内容写入显示对话框

private void showDialog(String your_message){
   Intent intent=new Intent(this,DialogActivity.class);   
   intent.putExtra("message",message);
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   startActivity(intent);
}

此方式对话框将自动显示。 如果应用程序在后台,它将阻止显示对话框。 如果应用程序不在任何活动的后台,它可以显示对话框。

我这样做并且测试了它100%工作...