Activity 为 launchMode="SingleTask" 时,进度对话框未显示 2 次

Posted

技术标签:

【中文标题】Activity 为 launchMode="SingleTask" 时,进度对话框未显示 2 次【英文标题】:Progress Dialog is not showing 2 times when Activity is launchMode="SingleTask" 【发布时间】:2017-06-19 09:38:47 【问题描述】:

您好,当 Activity 具有 launchMode="SingleTask" 时,我遇到了 ProgressDialog 不显示第二次的问题。

我必须将 Activity 作为 SingleTask。我第一次单击按钮时,对话框正在显示,但是当我关闭活动并再次启动它并单击按钮时,ProgressDialog 不再显示。

我的代码:

private class FakeTask extends AsyncTask<Integer, Void, Void>
        private FakeCallBackListener mListener;
        FakeTask(FakeCallBackListener listener)
            mListener = listener;
        

        @Override
        protected void onPreExecute() 
            super.onPreExecute();
            mProgressDialog = new ProgressDialog(mContext);
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            mProgressDialog.setIndeterminate(true);
            mProgressDialog.setMessage(mContext.getString(R.string.processing_data));
            mProgressDialog.setCancelable(false);
            mProgressDialog.setInverseBackgroundForced(true);
            if (!((Activity)mContext).isFinishing())
                mProgressDialog.show();
            
        

        @Override
        protected Void doInBackground(Integer... params) 
            try 
                Thread.sleep(params[0]);
             catch (InterruptedException e) 
                e.printStackTrace();
            
            return null;
        

        @Override
        protected void onPostExecute(Void aVoid) 
            super.onPostExecute(aVoid);
            mProgressDialog.dismiss();
        
    

当按钮被点击时,我只是调用这个:

new FakeTask(listener).execute(delay);

在 Manifest 中的特定 Activity 我有:

android:launchMode="singleTask"

有什么建议吗?我知道,由于 Activity 实际上没有被销毁,因此将上下文传递给了一个死对话框。但是如何修复每次都显示的对话框?

【问题讨论】:

【参考方案1】:

我认为您在访问 mContext 时遇到问题。

为什么不将它作为参数传递给 FakeTask 构造函数?

private FakeCallBackListener mListener;
private Context mContext;

FakeTask(Context context, FakeCallBackListener listener) 
    mContext = context;
    mListener = listener;

【讨论】:

以上是关于Activity 为 launchMode="SingleTask" 时,进度对话框未显示 2 次的主要内容,如果未能解决你的问题,请参考以下文章

使用LaunchMode方式防止多次创建activity的总结

Activity的四种launchMode

Activity的launchMode和任务栈小结

全面解析Activity启动模式(LaunchMode)

activity launchMode

深入Activity,Activity启动模式LaunchMode完全解析