在我的应用程序中,我有一个用于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操作 – 这样做会使您的应用程序崩溃.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。