android - 我应该在 MainActivity 扩展 Activity 中使用 AsyncTask 类吗?

标签 android android-asynctask

我想知道 AsyncTask 是否在运行线程的主 Activity (MainActivity.java) 中使用。

例如,我注意到许多教程在使用 AsyncTask 时,在主类中声明了一个私有(private)类,扩展了 Activity,而不是为该 AsyncTask 创建独立的 .java 文件 (MyAsyncTask.java) class

但我注意到,当使用独立文件时,我无法运行 runOnUIThread(),因为它属于 Activity 类,那么我如何能够在扩展 AsyncTask 而不是 Activity 的独立 AsyncTask (MyAsyncTask.java) 中使用此方法。

最佳答案

那完全没问题。我经常这样做,但这取决于你如何使用它。如果它可以被其他 Activity 使用,那么我给它它自己的类或共享类。但如果它用于单一目的,那么我会将其作为 MainActivity 的内部类。

使其成为内部类的好处是它可以直接访问该类的成员变量。如果您将其设为一个单独的类,那么如果您需要传入 params(例如 context 或其他变量),则只需为其创建一个构造函数。

我不知道你在做什么,但我不确定你是否需要runOnUiThread()。您可以在 AsyncTask 文件中创建一个构造函数,并让它接受 context 作为参数以及您需要的任何其他内容。然后您可以在 onPostExecute()

中更新 UI

示例

public class MyAsyncTask extends AsyncTask{

    private Context context; 

    public MyAsyncTask(Context context) {  // can take other params if needed
        this.context = context;
    }

    // Add your AsyncTask methods and logic
    //you can use your context variable in onPostExecute() to manipulate activity UI
}

然后在您的MainActivity中调用它

MyAsyncTask myTask = new MyAsyncTask(this);  //can pass other variables as needed
myTask.execute();

关于android - 我应该在 MainActivity 扩展 Activity 中使用 AsyncTask 类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41449945/

相关文章:

java - 如何使用android提供的消息服务唤醒远程PC?

android - 不使用 Marshmallow 调用 Spinner onItemSelected

c# - MvvmCross 自定义事件绑定(bind)事件参数

android - Twitter 登录 Quickblox

java - 如何实例化AsyncTask

android - Asynctask .get() 奇怪的行为

android - XMLPullParser 在 Android 中的异步任务错误中从互联网解析

android - 自动检测链接抖动

java - Android 用图标构建迷你抽屉导航

java - 仅当结果已可用时启动异步任务并在单击按钮时执行操作,否则等待结果然后执行操作