`
tomxu
  • 浏览: 15846 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

错误使用AsyncTask导致UI处理出错

阅读更多

■■ 想做的效果是

     1.显示Loading画面

     2.然后异步在后台访问远程信息

     3.返回远程信息后,关闭Loading画面. 如果有错误,显示错误对话框.

 

在实现最初,所有处理都放到了AsyncTask的doInBackground()中,在显示对话框时出异常:

  Android Can't create handler inside thread that has not called Looper.prepare()

 

图得省事,使用了网上说的方法:

     Looper.prepare();

     显示对话框

     Looper.loop();

 

貌似好用了.

 

■■ 结果这两天发现画面经常有假死的情况

最终在stackoverflow上找到解决方法

 

     1. doInBackground()

         这里面只负责处理数据部分,UI的处理不要放在这里.

 

     2. onPostExecute()

         这里才是处理结果的地方,且是运行在UI线程下,不需要做其它处理.

 

难怪之前使用得怪怪的,我有的地方放在onPostExecute() 里,有的地方就是图省事放到了doInBackground()中,

我还奇怪不是在所有的地方都有这个现象呢.

 

 

■■ 刚才查了一下API文档,后悔当初没早点看就开始使用网上的例子,

    人家文档写的清楚清楚啊, 555555555555

 

----------------------------------------------------------------------------------------------------------------------------

  1. onPreExecute(), invoked on the UI thread immediately after the task is executed. This step is normally used to setup the task, for instance by showing a progress bar in the user interface.
  2. doInBackground(Params...), invoked on the background thread immediately after onPreExecute() finishes executing. This step is used to perform background computation that can take a long time. The parameters of the asynchronous task are passed to this step. The result of the computation must be returned by this step and will be passed back to the last step. This step can also use publishProgress(Progress...) to publish one or more units of progress. These values are published on the UI thread, in the onProgressUpdate(Progress...) step.
  3. onProgressUpdate(Progress...), invoked on the UI thread after a call to publishProgress(Progress...). The timing of the execution is undefined. This method is used to display any form of progress in the user interface while the background computation is still executing. For instance, it can be used to animate a progress bar or show logs in a text field.
  4. onPostExecute(Result), invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter.

 

 

 

分享到:
评论

相关推荐

    Android使用回调接口下载图片

    总结来说,"Android使用回调接口下载图片"这个实例展示了Android开发中如何有效地处理异步任务,特别是网络请求与UI更新的协调,以及如何利用回调接口实现通信。理解和掌握这些知识点对于成为一名合格的Android...

    Android 手机归属地查询程序.rar

    6. **错误处理**:网络请求可能会失败,数据解析也可能出错,因此需要有完善的错误处理机制。可以使用try-catch块捕获异常,显示友好的错误提示,并提供重试功能。 7. **缓存策略**:为了提高用户体验,可以将近期...

    l网上获取图片加载到istview

    当网络请求失败或者解析数据出错时,应该提供合适的错误处理和UI反馈,比如显示错误提示或者加载失败的图片。 8. **异步加载和更新UI** 图片加载和数据解析应在后台线程进行,完成后再更新UI。可以使用AsyncTask...

    安卓火车在线查询实例

    可以使用AsyncTask、Handler/Looper、Retrofit(含RxJava)等方法实现后台线程处理网络请求,然后在主线程更新UI。 5. **权限管理**:安卓6.0及以上版本引入了运行时权限管理,需要在应用运行时请求用户的网络访问...

    Android高级应用源码-仿360扫描模块.zip

    10. **错误处理**:在处理相机、网络等可能出错的环节,源码通常会有相应的错误处理机制,如捕获异常、显示错误提示等。 通过研究这个源码,开发者可以学习到如何在Android平台上构建一个完整的扫描应用,包括与...

    Android app更新,实现service下载-IT计算机-毕业设计.zip

    - 需要考虑网络连接失败、文件下载出错等多种异常情况,并提供相应的错误处理和重试机制。 8. **版本检测**: - 在应用启动时,通常会检查服务器上的最新版本信息,对比本地版本号来判断是否需要更新。这可以通过...

    adroid天气预报源码

    - **数据绑定框架**:可能使用了Android Data Binding库,将数据模型与UI元素直接关联,简化代码并减少逻辑错误。 5. **权限管理** - **Android权限**:由于涉及到网络访问,应用需要在AndroidManifest.xml中声明...

    Android Log分析

    1. **异步处理**:将耗时操作移到后台线程执行,如使用AsyncTask、IntentService或Java的Executor服务。 2. **Handler/Looper机制**:用于主线程和后台线程之间的通信,确保更新UI的操作在主线程进行。 3. **避免...

    Android代码-演化理解异步加载图片.zip

    在Android开发中,异步加载图片是一项至关重要的技术,它能显著提升应用的用户体验,防止因为图片加载导致的UI阻塞。本资料“Android代码-演化理解异步加载图片.zip”可能包含了一系列关于如何在Android应用程序中...

    android 弹性的ListView

    使用Handler、AsyncTask或者LiveData等机制,确保数据加载完成后安全地更新UI。 为了解决上述问题,开发者可以: - 使用Logcat调试工具,查看错误日志,定位具体异常; - 添加异常捕获,提供更详尽的错误信息,...

    listview在可视区域加载网络图片

    3. **异步加载图片**:使用`AsyncTask`或者`Handler`来处理网络请求和图片解码,避免阻塞UI线程。现代Android库如Glide和Picasso已经封装了这些功能,可以方便地实现异步加载。 4. **占位符与错误图**:在图片加载...

    Android应用源码之14.程序调试技术学习.zip

    分析提供的源码实例,可以帮助理解调试过程中遇到的各种情况,如异常处理、资源管理、UI更新等问题。通过对源码的深入研究,可以提升解决问题的能力。 9. **调试远程设备** 除了本地模拟器和物理设备,还可以通过...

    Android收藏的工具类

    在Android开发过程中,工具类(Utils Class)是程序员经常使用的代码模块,它们封装了常见的功能,使得代码更简洁、易维护。"Android收藏的工具类"这个资源包含了多个实用工具类,涵盖了图片缓存、异步请求、数据库...

    ListView的动态加载-很简单的Demo

    6. **错误处理**:考虑在网络请求失败或数据加载出错时的处理,如显示错误提示或重试机制。 总之,这个Demo旨在提供一个简单易懂的实现,帮助开发者理解并应用ListView的动态加载功能,从而优化大型数据集的展示。

    foursquare-venues:使用 Foursquare API 的简单 Android 应用

    4. **异步处理**:由于网络请求可能会阻塞主线程,导致应用无响应,因此通常使用 AsyncTask 或现代的 Coroutines 进行后台处理,确保用户界面的流畅。 5. **地理定位**:为了提供附近的地点信息,应用可能需要访问 ...

    脆弱:kotlin和带有recyclerview的片段

    3. **协程支持**:Kotlin引入了协程来处理异步操作,但在RecyclerView中使用协程需谨慎,避免在主线程中启动协程,否则会导致UI卡顿。 **RecyclerView的常见问题** 1. **数据绑定**:在Fragment中使用RecyclerView...

    Android DownLoader带进度条的下载程序Demo

    对于可能出现的网络异常、文件I/O错误,需要捕获并处理,确保程序的健壮性。例如,可以使用try-catch语句块,对IOException、SocketTimeoutException等异常进行处理。 八、资源释放 下载任务完成后,记得关闭网络...

    TipsForAndroid:小技巧

    使用`AsyncTask`、`IntentService`、`Handler`或现代的`Coroutines`来避免ANR(应用无响应)问题。 7. **资源优化** 图片资源应尽可能压缩,使用WebP格式可节省空间。针对不同设备提供不同的密度资源,避免拉伸...

    EboysImageLoaderDemo:EboysImageLoaderDemo

    在Android平台上,通常使用AsyncTask或者Handler/Looper进行异步操作,确保UI线程的流畅性。 2. **内存缓存与磁盘缓存**:为了提高图片加载速度和减少网络请求,EboysImageLoaderDemo可能实现了内存缓存和磁盘缓存...

    AndroidPlayground:Android Playground有问题

    如果应用没有正确请求权限,可能会导致某些功能无法使用。检查AndroidManifest.xml文件中是否包含了所有必要的权限声明。 6. **依赖库冲突**: - 如果项目中包含多个第三方库,可能存在版本冲突。检查build.gradle...

Global site tag (gtag.js) - Google Analytics