private void btnfinishClick(View v)
{
new Thread(new MyRunnable()).start();
}
class MyRunnable implements Runnable{
@Override
public void run()
{
try
{
setContentView(R.layout.activity_call_finish);
TextView tv = (TextView)findViewById(R.id.name);
tv.setText(number);
TextView prompt = (TextView)findViewById(R.id.prompt);
prompt.setText("通话结束");
TextView ct = (TextView)findViewById(R.id.call_chronometer);
ct.setText(call_chronometer.getText());
Thread.sleep(1000);
myHandler.sendEmptyMessage(1);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
在通话结束时跳转到一个过渡界面,而上面的写法是将更新UI的代码写入到UI子线程中,所以会报错:
CalledFromWrongThreadException: Only the original thread that created a view
正确的做法时
将:
setContentView(R.layout.activity_call_finish);
TextView tv = (TextView)findViewById(R.id.name);
tv.setText(number);
TextView prompt = (TextView)findViewById(R.id.prompt);
prompt.setText("通话结束");
TextView ct = (TextView)findViewById(R.id.call_chronometer);
ct.setText(call_chronometer.getText());
代码从子线程中提到btnfinishClick()里面,这样就不会报错了
分享到:
相关推荐
在Android开发中,`android.view.ViewRootImpl$CalledFromWrongThreadException` 是一个常见的异常,它通常发生在尝试在非UI线程(主线程)中修改用户界面元素时。这个异常表明,只有创建视图的原始线程(即主线程)...
2.android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 3.java.lang.RuntimeException: Can't create handler inside thread ...
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 这个异常为何不是 Only the main thread that created a view hierarchy ...
本文实例讲述了Android实现在子线程中更新Activity中...ERROR/AndroidRuntime(1222): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its
如果是在WT进行UI的更新,则会抛出异常,android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.(只有创建这个View的原
为什么可以在子线程通过setText进行更新UI ... Only the original thread that created a view hierarchy can touch its views.); } } 一般情况下在子线程更新UI是会报错的,因为在ViewRootImpl
在使用 dialog 的时候,因为线程问题,在调用 dismiss() 方法的时候,出现如下常见的 crash–Only the original thread that created a view hierarchy can touch its views.,堆栈信息如下: threadName:main,...
### Android异步处理详解:使用Thread+Handler实现非UI线程更新UI界面 #### 概述 Android系统中,每一个应用程序都运行在一个独立的Dalvik虚拟机进程中。当应用程序启动时,系统会创建一个主线程(MainThread),也...
在这种情况下,需要开启新的线程,但不能直接访问View对象,因为这会报android.view.ViewRoot$CalledFromWrongThreadException异常。为了解决这个问题,需要创建一个继承了android.os.Handler的子类,并重写...
由于Android系统的安全机制,所有与UI相关的操作必须在主线程中执行,因此我们不能在子线程中直接修改UI组件,否则会引发“CalledFromWrongThreadException”。 2. Handler(处理者): Handler是Android中用于在...
如果在非主线程调用这些方法,系统会抛出`CalledFromWrongThreadException`异常。 6. **布局更新流程**: - `requestLayout()`:当需要重新布局时,比如View的尺寸发生变化,会调用此方法。`ViewRootImpl`中的`...
而传统的 Thread 类则可以自定义线程逻辑,但需要注意的是,直接在 Thread 中更新 UI 会导致 CalledFromWrongThreadException 异常,所以通常需要配合 Handler 使用。 总的来说,Android 多线程管理的核心在于合理...
- 添加或移除View的操作通常需要在主线程中进行,否则可能会抛出`CalledFromWrongThreadException`异常。如果涉及到耗时操作,如网络请求,应使用Handler、AsyncTask或其他异步处理机制。 10. **设计原则**: - ...
- 由于异常处理是在主线程中进行的,因此在显示对话框或执行其他UI操作时,需要确保在正确的线程中进行,否则可能会出现`Android.view.ViewRootImpl$CalledFromWrongThreadException`的错误。 - 记录异常信息时,...
这种方法避免了在非UI线程直接操作UI组件导致的`CalledFromWrongThreadException`异常。 总结,Android中的进度条组件提供了丰富的功能,可以帮助开发者展示任务执行的状态。通过理解其基本使用、自定义样式以及...
在Android开发中,更新View是常见的任务,而`invalidate()`和`postInvalidate()`就是用于这一目的的关键方法。这两者都是用来标记一个View为脏(dirty),需要重新绘制,但它们在使用场景和机制上有所不同。 1. `...
7. **ViewRoot$CalledFromWrongThreadException** 这个异常表示你尝试在非UI线程中修改视图组件。Android的UI操作必须在主线程(UI线程)中执行。如果你需要在其他线程中进行更新,可以使用 `runOnUiThread()` 或者...
帧布局(FrameLayout)是Android系统提供的一种布局方式,它允许你将子视图(View)按照层次叠加放置。在帧布局中,第一个添加的视图位于底层,后续添加的视图会依次覆盖在前面的视图之上,就像图片帧一样逐层叠加。...
4. **运行时动态更新UI**:因为是运行时添加,所以需要确保所有操作都在UI线程上执行,否则可能会抛出`android.view.ViewRootImpl$CalledFromWrongThreadException`异常。可以使用`runOnUiThread()`或者`Handler`来...