gpt4 book ai didi

android - 为什么 AsyncTask 运行在应用程序的主线程中?

转载 作者:可可西里 更新时间:2023-11-01 19:09:57 27 4
gpt4 key购买 nike

在我的应用程序中,我有一个 UI 类,其名称是“SettingActivity”。

然后为了在后台做一些工作,我将这个 UI 类 (SettingActivity) 绑定(bind)到一个服务。该Service中有两个预定义的方法(在.aidl文件中定义),一个是startTask(),另一个是stopTask()。

在 startTask() 中,我调用了一个 AsyncTask。但是当我检查这个 AsyncTask 的 Looper 的名称时。这是“主要”。在我看来,AsyncTask 应该启动除主线程之外的另一个线程

那么有人知道为什么会这样吗?

代码如下:



@Override
protected void onPreExecute() {
super.onPreExecute();
Log.d(TAG, "onPreExecute "+Looper.myLooper().getThread().getName());
}

然后我将得到 main 作为输出。

最佳答案

AsyncTask 有几个您可以重写的部分:一个 doInBackground 方法,实际上它在一个单独的线程上运行,以及三个方法——onPreExecuteonProgressUpdateonPostExecute — 在 UI 线程上运行。 (这些方法的默认实现不执行任何操作,onProgressUpdate 仅在您调用 publishProgress 时运行,通常是在 doInBackground 中调用。)onPostExecute 是发布必须在UI线程上完成的结果(例如更新 View 层次结构,或在 TextView 中设置文本)。它还可以发布进度更新。为了使这一切正常工作,必须创建 AsyncTask,并在 UI 线程上调用 execute 方法。

您不得从 doInBackground 中调用 UI 操作——这样做会使您的应用程序崩溃。

关于android - 为什么 AsyncTask 运行在应用程序的主线程中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4918781/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com