`

CalledFromWrongThreadException

阅读更多

今天写一个进度条更新程序,遇到这个异常

网上go之发现解决方案如下:

1:利用Handler

 

Handler textHandle = new Handler() {

			@Override
			public void handleMessage(Message msg) {
				//do something
			}
};

new Thread(){
  public  void run(){
	textHandle.sendMessage(textHandle.obtainMessage());
  }
}

 2:利用 runOnUiThread

 runOnUiThread(new Runnable() {

 runOnUiThread(new Runnable() {
 public void run(){}
}

 

3:利用Handler (未验证过)

Handler refresh = new Handler();
refresh.post(new Runnable() {
    public void run()
    {
         doSomething
    }
});

 4:利用AsyncTask (未验证过)

 

后想起Swing多线程中,也有一个GUI 线程模型类似,对UI的修改只能在特定的线程里处理,看来很多模式其实都是一样的,毕竟是经过血的教训提炼出来的模式。

分享到:
评论

相关推荐

    问题:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original

    在Android开发中,`android.view.ViewRootImpl$CalledFromWrongThreadException` 是一个常见的异常,它通常发生在尝试在非UI线程(主线程)中修改用户界面元素时。这个异常表明,只有创建视图的原始线程(即主线程)...

    【Android】CalledFromWrongThreadException 深入源码分析

    先上结论 出现此问题的原因是:在非 UI 线程中创建了 Dialog,而在 UI 线程中调用了 show() 方法 问题还原 在使用 dialog 的时候,因为线程问题,在调用 dismiss() 方法的时候,出现如下常见的 crash–Only the ...

    invalidate

    在这种情况下,需要开启新的线程,但不能直接访问View对象,因为这会报android.view.ViewRoot$CalledFromWrongThreadException异常。为了解决这个问题,需要创建一个继承了android.os.Handler的子类,并重写...

    android平台初级错误整理

    7. **ViewRoot$CalledFromWrongThreadException** 这个异常表示你尝试在非UI线程中修改视图组件。Android的UI操作必须在主线程(UI线程)中执行。如果你需要在其他线程中进行更新,可以使用 `runOnUiThread()` 或者...

    android 线程

    当后台线程尝试更新UI组件时,Android会立即抛出`CalledFromWrongThreadException`异常并终止当前活动(Activity)。这种机制有助于开发者尽早发现线程相关的错误,并鼓励他们编写更健壮的应用程序代码。 ##### 2. ...

    android实现顶部弹出式消息通知

    - 添加或移除View的操作通常需要在主线程中进行,否则可能会抛出`CalledFromWrongThreadException`异常。如果涉及到耗时操作,如网络请求,应使用Handler、AsyncTask或其他异步处理机制。 10. **设计原则**: - ...

    Android线程和进程介绍.pdf

    如果在非UI线程中尝试修改UI元素,会抛出`android.view.ViewRoot$CalledFromWrongThreadException`异常。 为了确保用户界面的响应性,避免主线程被长时间阻塞,耗时的操作如网络请求、数据库操作等应当在其他线程中...

    Android 倒计时实现源码.zip

    `CountDownTimer`的执行是在后台线程进行的,因此在`onTick`和`onFinish`方法中直接更新UI可能会导致`android.view.ViewRootImpl$CalledFromWrongThreadException`异常。为避免这个问题,你需要在这些方法中使用`...

    蓝牙接收数据并用折线图实时表示

    这一步至关重要,否则可能会引发“CalledFromWrongThreadException”异常。 除此之外,为了提升用户体验,应用可能还实现了蓝牙设备的搜索、连接状态的显示、错误处理机制等。在蓝牙连接不稳定或者数据传输出错时,...

    Android开发中,使用线程应该注意的问题.doc

    10. **避免UI操作在非主线程中**:所有的UI更新必须在主线程进行,否则会抛出`CalledFromWrongThreadException`异常。`runOnUiThread()`或`Handler`可以用来安全地在主线程执行这些操作。 总之,理解并掌握Android...

    Android多线程处理.pdf

    子线程虽然能执行耗时操作,但它们无法直接修改UI,否则会引发`CalledFromWrongThreadException`异常。这时,Android引入了Handler、Message和Looper的概念。Handler是用于发送和处理消息的类,Message是消息对象,...

    android 学习好东西

    如果直接在后台线程中更新UI,会导致`CalledFromWrongThreadException`异常。 为了解决这一问题,Android提供了一套基于`MessageQueue`、`Handler`和`Looper`的通信机制,允许开发者在后台线程中执行耗时任务的同时...

    android学习笔记之消息机制,异步和多线程[参考].pdf

    Android规定,非UI线程不能直接修改UI组件,否则会抛出`CalledFromWrongThreadException`异常。为了解决这个问题,可以使用`Handler`将更新UI的操作发送回主线程,或者使用`runOnUiThread()`方法。此外,`AsyncTask`...

    window和windowManager1

    如果在非主线程调用这些方法,系统会抛出`CalledFromWrongThreadException`异常。 6. **布局更新流程**: - `requestLayout()`:当需要重新布局时,比如View的尺寸发生变化,会调用此方法。`ViewRootImpl`中的`...

    Android多线程处理[参考].pdf

    若试图在子线程中操作UI,系统会抛出`CalledFromWrongThreadException`异常。为了解决这个问题,Android提供了Handler、Message和Message Queue(消息队列)机制。Handler是线程间通信的一个关键组件,它可以发送和...

    安卓Android源码——点按钮添加TableRow源码.zip

    4. **运行时动态更新UI**:因为是运行时添加,所以需要确保所有操作都在UI线程上执行,否则可能会抛出`android.view.ViewRootImpl$CalledFromWrongThreadException`异常。可以使用`runOnUiThread()`或者`Handler`来...

    Android应用源码之五种效果的Toast-IT计算机-毕业设计.zip

    否则可能会导致`Android.view.ViewRootImpl$CalledFromWrongThreadException`异常。 7. **不同类型的Toast**:五种效果可能包括信息提示、警告、成功状态、错误状态等,每种类型对应不同的图标和颜色,以增强用户...

    android多线程讲解看图理解[归纳].pdf

    例如,TextView的setText()方法必须在主线程中执行,否则会抛出`CalledFromWrongThreadException`异常。因此,涉及UI更新的操作必须回到主线程进行,可以使用Handler、RunOnUiThread或AsyncTask等机制。 总之,...

    android 源码

    由于Android系统的单线程模型,直接在其他线程中修改UI元素可能会导致“CalledFromWrongThreadException”异常,提示只有主线程才能更新UI。然而,有时候我们看到代码中非UI线程似乎可以访问UI对象而没有引发错误,...

    获取网址title的textview

    - 注意线程安全:由于网络请求是异步操作,应在主线程中更新UI,否则可能抛出`CalledFromWrongThreadException`。如果网络请求在子线程中,可以通过`runOnUiThread`或使用`Handler`来确保在主线程执行UI操作。 5. ...

Global site tag (gtag.js) - Google Analytics