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

前端之家收集整理的这篇文章主要介绍了android – 为什么AsyncTask在应用程序的主线程中运行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的应用程序中,我有一个用于UI的类,其名称是“SettingActivity”.

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

在startTask()中,我调用了一个AsyncTask.但是当我检查这个AsyncTask的Looper的名字.这是“主”.在我看来,AsyncTask应该启动另一个Thread,而不是主线程.

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

代码如下:

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

然后我会得到main作为输出.

解决方法

AsyncTask有几个部分:doInBackground方法实际上在单独的线程上运行,并且在UI线程上运行的onPostExecute方法. onPostExecute的目的是在UI线程上发布必须完成的结果(例如更新视图层次结构或在文本视图中设置文本).它也可以发布进度更新.为了使这一切正常工作,必须创建AsyncTask,并在UI线程上调用execute方法.

您不能从doInBackground中调用UI操作 – 这样做会使您的应用程序崩溃.

原文链接:https://www.f2er.com/android/311729.html

猜你在找的Android相关文章