`

CalledFromWrongThreadException: Only the original thread that created a view

阅读更多
    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.view.ViewRootImpl$CalledFromWrongThreadException: Only the original

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

    开新线程引发的常见3个异常

    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 子线程更新UI

    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中UI的方法

    本文实例讲述了Android实现在子线程中更新Activity中...ERROR/AndroidRuntime(1222): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its

    详解Android UI更新的几种方法

    如果是在WT进行UI的更新,则会抛出异常,android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.(只有创建这个View的原

    为什么能在子线程通过setText进行更新UI

    为什么可以在子线程通过setText进行更新UI ... Only the original thread that created a view hierarchy can touch its views.); } } 一般情况下在子线程更新UI是会报错的,因为在ViewRootImpl

    【Android】CalledFromWrongThreadException 深入源码分析

    在使用 dialog 的时候,因为线程问题,在调用 dismiss() 方法的时候,出现如下常见的 crash–Only the original thread that created a view hierarchy can touch its views.,堆栈信息如下: threadName:main,...

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    ### Android异步处理详解:使用Thread+Handler实现非UI线程更新UI界面 #### 概述 Android系统中,每一个应用程序都运行在一个独立的Dalvik虚拟机进程中。当应用程序启动时,系统会创建一个主线程(MainThread),也...

    invalidate

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

    android demo,实现主线程handle,工作子线程threadHandle的处理

    由于Android系统的安全机制,所有与UI相关的操作必须在主线程中执行,因此我们不能在子线程中直接修改UI组件,否则会引发“CalledFromWrongThreadException”。 2. Handler(处理者): Handler是Android中用于在...

    window和windowManager1

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

    Android_Handle_Thread

    而传统的 Thread 类则可以自定义线程逻辑,但需要注意的是,直接在 Thread 中更新 UI 会导致 CalledFromWrongThreadException 异常,所以通常需要配合 Handler 使用。 总的来说,Android 多线程管理的核心在于合理...

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

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

    拦截android系统异常

    - 由于异常处理是在主线程中进行的,因此在显示对话框或执行其他UI操作时,需要确保在正确的线程中进行,否则可能会出现`Android.view.ViewRootImpl$CalledFromWrongThreadException`的错误。 - 记录异常信息时,...

    Android进度条实例

    这种方法避免了在非UI线程直接操作UI组件导致的`CalledFromWrongThreadException`异常。 总结,Android中的进度条组件提供了丰富的功能,可以帮助开发者展示任务执行的状态。通过理解其基本使用、自定义样式以及...

    android中Invalidate和postInvalidate的更新view区别

    在Android开发中,更新View是常见的任务,而`invalidate()`和`postInvalidate()`就是用于这一目的的关键方法。这两者都是用来标记一个View为脏(dirty),需要重新绘制,但它们在使用场景和机制上有所不同。 1. `...

    android平台初级错误整理

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

    帧布局例程

    帧布局(FrameLayout)是Android系统提供的一种布局方式,它允许你将子视图(View)按照层次叠加放置。在帧布局中,第一个添加的视图位于底层,后续添加的视图会依次覆盖在前面的视图之上,就像图片帧一样逐层叠加。...

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

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

Global site tag (gtag.js) - Google Analytics