Mat*_*ieu 13 multithreading android android-asynctask
在我的应用程序中,我有一个UI类的东西,其名称是"SettingActivity".
然后,为了在后台执行某些工作,我将此UI类(SettingActivity)绑定到Service.该Service中有两个预定义的方法(在.aidl文件中定义),一个是startTask(),另一个是stopTask().
在startTask()中,我调用了AsyncTask.但是当我检查这个AsyncTask的Looper的名字时.这是"主要".在我看来,AsyncTask应该启动除主线程之外的另一个线程.
有人知道为什么会这样吗?
代码如下:
__CODE__
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.d(TAG, "onPreExecute "+Looper.myLooper().getThread().getName());
}
Run Code Online (Sandbox Code Playgroud)
Ted*_*opp 27
一个的AsyncTask有几个部分,你可以覆盖:一个doInBackground是呢,其实方法,在一个单独的线程运行,和三个方法- onPreExecute,onProgressUpdate以及onPostExecute在UI线程上运行-即.(这些方法的默认实现不执行任何操作,onProgressUpdate只有在您publishProgress通常从内部调用时才会运行doInBackground.)目的onPostExecute是发布必须在内部完成的结果(例如更新视图层次结构或在文本视图中设置文本). UI线程.它还可以发布进度更新.为了使这一切正常工作,必须execute在UI线程上创建AsyncTask,并调用方法.
您不能从内部调用UI操作doInBackground- 这样做会导致应用程序崩溃.
事实上,我已经检查了android的文档, onPreExecute(),onProgressUpdate(Progress ...)和onPostExecute(Result)都是"在UI线程上调用的".
仅"在后台线程上调用" doInBackground(Params ...)方法.
| 归档时间: |
|
| 查看次数: |
18096 次 |
| 最近记录: |