【问题标题】:is it possible to pop up a dialog using async task是否可以使用异步任务弹出对话框
【发布时间】:2012-06-11 14:20:24
【问题描述】:

假设我正在运行活动 A。我想写一个AsyncTask,它将弹出一个关于活动 A 的对话框。我正在考虑创建一个广播接收器来执行此操作,但对我来说似乎有点倒退。 不太熟悉AsyncTask

Intent topop = this.getIntent();
String str = topop.getStringExtra("key1");
if(str.equals("message"))
    dialog.show();

另一件事:getIntent() 是如何工作的?如果我发送重复的意图?它只会抓住第一个吗?

【问题讨论】:

  • 你想完成什么? AsyncTasks 旨在在后台执行长时间运行的操作,因此它们与弹出对话框没有关系(除了显示一个说“加载”或查询初始信息)。

标签: android android-layout dialog android-asynctask


【解决方案1】:

是否可以使用异步任务弹出对话框

是的,很有可能:)

您可以在onPreExecuteonPostExecute 中执行此操作,因为这两个方法是在 UI 线程中调用的。

不要尝试在 doInBackground 方法中弹出对话框,因为此方法在非 ui 线程中运行

【讨论】:

  • 所以我只写了一个异步任务,无论我从哪里启动它,如果我执行 dialog.show();在 onPostExecute 中,它会在主 UI 线程上弹出,这在技术上是我的活动?
  • 上下文是活动A的类
【解决方案2】:

AsyncTask 被设计为一种便利(帮助类),允许您执行一些后台工作并将结果传递到 UI。在 Android 中,您 1) 在收到“应用程序未响应”消息之前,您无法阻塞主(“ui”)线程超过几秒钟;2)您无法从主线程之外操作 UI;因此 asynctask 背后的想法。解释完之后,假设我正确理解了您的问题,您可以在 onPreExecuteonPostExecute 中的 AsyncTask 内弹出一个对话框。您只能在doInBackground 内执行此操作。

【讨论】:

  • 你能问我上述异步任务的模板吗?我计划在 C 类中调用它,并让它在 A 类中弹出。
  • 这是一个可重用 AsyncTask 的示例。 github.com/levinotik/ReusableAsyncTask 您不应该将异步任务作为一个 Activity 中的内部类在另一个 Activity 中使用。只需将其设为顶级类,将上下文传递给 asynctask 并使用该上下文来显示对话框
【解决方案3】:

当然,只需在 runOnUiThread() 中调用 dialog.show()

yourActivity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        dialog.show();
    }
});

更多关于 UI 线程:http://developer.android.com/resources/articles/painless-threading.html

【讨论】:

    猜你喜欢
    • 2013-01-15
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多