Android:AsyncTask 需要一个上下文来在离开包含活动后显示警报

Posted

技术标签:

【中文标题】Android:AsyncTask 需要一个上下文来在离开包含活动后显示警报【英文标题】:Android: AsyncTask needs a context to show an alert after leaving containing activity 【发布时间】:2015-01-22 02:18:14 【问题描述】:

我有两个活动,其中一个调用表单的内部任务:私有类 AsyncTask,它调用任务然后完成,转到另一个活动。 AsyncTask 有时会显示一个警报对话框,但很可能创建警报所需的第一个活动的上下文不是应用程序的当前上下文,即不是当前工作活动的上下文。所以当在 AsyncTask 中调用 dialog.show() 时,应用会崩溃。

有什么解决办法吗?

我没有发布任何代码,因为我认为如果你在不理解代码的情况下得到这个想法会更好,我调试了应用程序,它在执行 alert.show() 后真的崩溃了。

LogCat 输出: 11-24 13:30:08.561: W/dalvikvm(2810): threadid=14: thread exiting with uncaught exception (group=0x41cd69a8) 11-24 13:30:08.752: E/cutils(2896): to chown(/mnt/shell/emulated/0, 0, 0) 11-24 13:30:08.753: E/cutils(2896): to chown(/mnt/shell/emulated/obb, 0, 0) 11-24 13:30:08.753: E/cutils(2896): to chown(/storage/emulated/0/android, 0, 0) 11-24 13:30:08.754: E/cutils(2896): to chown(/storage/emulated/0/Android/obb, 0, 0)

【问题讨论】:

但是显示 logcat 将是一件好事... 11-24 13:30:08.561: W/dalvikvm(2810): threadid=14: 线程以未捕获的异常退出 (group=0x41cd69a8) 11-24 13:30:08.752: E/cutils (2896): to chown(/mnt/shell/emulated/0, 0, 0) 11-24 13:30:08.753: E/cutils(2896): to chown(/mnt/shell/emulated/obb, 0, 0) 11-24 13:30:08.753: E/cutils(2896): to chown(/storage/emulated/0/Android, 0, 0) 11-24 13:30:08.754: E/cutils(2896): to chown(/storage/emulated/0/Android/obb, 0, 0) 这些是 logcat 显示的错误和警告 肯定还有更多,这不是完整的 logcat。请在 Eclipse 中设置一个过滤器以仅显示来自您的应用程序的 logcat 并将其限制为错误。 AsyncTask 在后台运行,意味着不会阻塞或影响 UI,并且 AlertDialog 需要 Activity 作为上下文,而 Alertdialog 需要在其上显示自己的窗口。所以,你需要使用接口,在接口方法中触发它,你可以使用 alertdialog 或使用 run runOnUiThread(new Runnable() @Override public void run() // TODO 自动生成的方法存根 ); 【参考方案1】:

编写代码以在 runOnUiThread 中显示警报对话框

runOnUiThread(new Runnable() 

    @Override
    public void run() 
        // TODO Auto-generated method stub
        // write your code here and use app context
    
);

【讨论】:

以上是关于Android:AsyncTask 需要一个上下文来在离开包含活动后显示警报的主要内容,如果未能解决你的问题,请参考以下文章

在上下文不工作的情况下从 AsyncTask onPostExecute 调用 Android Intent

AsyncTask 和上下文

在 AsyncTask 或 Service 上下载文件?

android,异步任务类中的Toast如何获得Context?

从 AsyncTask 携带和重用信息(json 字符串)?

如何防止 JobService 使用的 AsyncTask 中的上下文泄漏