【问题标题】:One Asynctask for multiple activities?一个 Asynctask 用于多个活动?
【发布时间】:2013-01-28 19:42:59
【问题描述】:

基本上,我有一个用于下载文件的 Asynctask。我可以从我的主要 UI 活动中调用它,但是如果我想从不同的活动中调用它怎么办 - 即一个活动是带有下载手册链接的主菜单,另一个活动是要下载的所有可用文档的 ListView。

我必须为此创建另一个 Asynctask 吗?

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

    我猜你的 MainActivity 中有 AsyncTask 作为内部类。您可以获取 AsyncTask 的代码并将其放入两个类都公开(或可访问)的新文件中。请记住,您不止一次cann't execute 一个 AsyncTask 的实例,但您可以创建多个 AsyncTask 的实例。

    class MainActivity{
    new MyTask().execute();
    }
    

    .

    class DifferentActivity {
      new MyTask().execute();//a new instance
    }
    

    .

    class MyTask extends AsyncTask{
       public MyTask(Context context){
       }//Pass in context.
    }
    

    所有不同的文件。

    【讨论】:

    • 但是如果我也使用进度对话框怎么办 - 我如何保持“一致”以便它实际上同时显示?
    • 可以在构造函数中传入。
    • @NightStrider 您可能希望看到这个post 来回答您的最后一个问题
    【解决方案2】:

    必须从 UI 线程调用异步任务,该线程通常是正在运行的活动。

    听起来这些活动是通过意图启动的,并且它们显示自己的 UI,所以是的,您可以从它们运行 Asynctask。

    现在唯一的规定是您需要在所有活动都可以看到的地方声明/定义异步任务(因此可以创建一个扩展异步任务 com.myapp.MyAsyncTask 的类,该类还包括活动,例如 com.myapp.MyMainMenuActivity )。

    【讨论】:

    • “必须从 UI 线程调用异步任务”。这从 JELLY_BEAN 开始自动完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多