iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android实现在子线程中更新Activity中UI的方法
  • 275
分享到

Android实现在子线程中更新Activity中UI的方法

方法activity线程Android 2022-06-06 08:06:01 275人浏览 泡泡鱼
摘要

本文实例讲述了Android实现在子线程中更新Activity中UI的方法。分享给大家供大家参考,具体如下: 在Android平台下,进行多线程编程时,经常需要在主线程之外的一

本文实例讲述了Android实现在子线程中更新Activity中UI的方法。分享给大家供大家参考,具体如下:

在Android平台下,进行多线程编程时,经常需要在主线程之外的一个单独的线程中进行某些处理,然后更新用户界面显示。但是,在主线线程之外的线程中直接更新页面显示的问题是:系统会报这个异常:

ERROR/AndroidRuntime(1222): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

或许编程人员会在线程中调用Toast.makeText()方法,试图在UI中显示某些提示信息,这样也会报如下的错误:

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

解决方法:子线程中无法直接去更新Activity中的UI,一般的作法是子线程向Activity传递消息,然后Activity根据这些消息自己来更新UI。Android中有一个类叫android.os.Handler,就是用来做这件事的。

1. 在需要被线程更新UI的Activity 中声明一个android.os.Handler 类的变量,


private Handler handler;

2. onCreate函数中加入handler的初始化:


@Override
public void onCreate(Bundle savedInstanceState) {
//其他代码……
//……
//……
handler=new Handler(){
public void handleMessage(Message msg){
String message=(String)msg.obj;//obj不一定是String类,可以是别的类,看用户具体的应用
 //根据message中的信息对主线程的UI进行改动
 //……                           }
}
};

另外Activity中需要提供handler的get函数,这样线程才能得到handler,进而传递消息。


public Handler getHandler(){
return this.handler;
}

3.子线程类中需要持有表示上下文的Context类对象,实际应用中这个引用就是指向要更新UI的Activity对象,一般声明为:


private Context ctx;

然后在子线程类构造函数或其它函数中初始化ctx,这一步是为了能够得到Activity对象中的Handler对象。(或者用别的方法也行,只要子线程能得到Activity中的这个handler对象就可以。)

4. 最后一步,在子线程运行到某个地方,需要向Activity传递消息的时候,创建一个android.os.Message 类的对象,将要传送的对象加入message ,通过Handler发布传送给主线程,代码示例如下:


String str_temp="要传给主线程的消息"
Message message = Message.obtain();
message.obj=str_temp;
//通过Handler发布传送消息,handler
handler.sendMessage(message);

记住,这里的handler跟Activity中的handler是同一个对象噢,这样才是把消息送到那个Activity中了。

另外,这种方法不但可以让子线程更新UI,还可以有别的用途。现在我们假设子线程可能抛出某些错误,这个应该是很正常的,那么如何让错误信息能够让用户知道呢?很简单,在catch语句块中,将catch到的错误对象,放入message.obj中,传递给Activity,Activity中用Toast.makeText()方法将错误信息显示出来就可以了。

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android线程与消息机制用法总结》、《Android编程之activity操作技巧总结》、《Android调试技巧与常见问题解决方法汇总》、《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

您可能感兴趣的文章:Android:如何编写“万能”的ActivityAndroid中fragment与activity之间的交互(两种实现方式)Android activity堆栈及管理实例详解Android实现Activity水平和垂直滚动条的方法Android开发中Activity创建跳转及传值的方法详解Android开发中Activity的四种launchModeAndroid开发中关于获取当前Activity的一些思考Android判断Activity是否在最上层的方法Android编程中activity启动时出现白屏、黑屏问题的解决方法Android:“万能”Activity重构篇


--结束END--

本文标题: Android实现在子线程中更新Activity中UI的方法

本文链接: https://www.lsjlt.com/news/25116.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android 在子线程中更新UI的几种方法示例
    本文介绍了Android 在子线程中更新UI的几种方法示例,分享给大家,具体如下:方式一:Handler和Message① 实例化一个Handler并重写handlerMessage()方法private Handler handler =...
    99+
    2023-05-30
    android 子线程 更新ui
  • Android如何实现使用handler在子线程中更新UI示例
    小编给大家分享一下Android如何实现使用handler在子线程中更新UI示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MainActivity代码:pac...
    99+
    2023-05-30
    android handler
  • 在WPF中使用多线程更新UI
    有经验的程序员们都知道:不能在UI线程上进行耗时操作,那样会造成界面卡顿,如下就是一个简单的示例: public partial class MainWindow : Win...
    99+
    2024-04-02
  • android应用中实现异步更新UI的方法有哪些
    android应用中实现异步更新UI的方法有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。android中有下列几种异步更新ui的解决办法:Activity.runOnUi...
    99+
    2023-05-31
    android roi
  • Android编程实现在Activity中操作刷新另外一个Activity数据列表的方法
    本文实例讲述了Android编程实现在Activity中操作刷新另外一个Activity数据列表的方法。分享给大家供大家参考,具体如下:做Android项目中遇到这样一个问题:有两个acticity,一个显示好友列表,另外一个显示会话列表,...
    99+
    2023-05-31
    android activity
  • 在WPF中怎么使用多线程更新UI
    本篇内容主要讲解“在WPF中怎么使用多线程更新UI”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在WPF中怎么使用多线程更新UI”吧!有经验的程序员们都知道:不能在UI线程上进行耗时操作,那样会...
    99+
    2023-07-02
  • Android中如何使用异步线程更新UI视图
    这篇文章主要为大家展示了“Android中如何使用异步线程更新UI视图”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android中如何使用异步线程更新UI视图”这篇文章吧。在Android中子...
    99+
    2023-05-30
    android
  • angular强制更新ui视图的实现方法
    目录angular 强制更新ui视图方法1 主要使用方法类 ChangeDetectorRef2 赋值引入3方法中调用angular踩坑 数据发生改变,视图未更新解决方案 ...
    99+
    2023-03-06
    angular强制更新ui视图 强制更新视图 angular更新ui视图
  • 怎么在Android中实现Service与Activity的通信
    本篇文章为大家展示了怎么在Android中实现Service与Activity的通信,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。第一种方式:通过MyBinder方式调用Service方法MainA...
    99+
    2023-05-30
    android service activity
  • Android编程实现activity dialog透明背景的方法
    本文实例讲述了Android编程实现activity dialog透明背景的方法。分享给大家供大家参考,具体如下:首先查一下window  activity的关系具体省略。。。。我的理解就是每个activity都有一个window...
    99+
    2023-05-31
    android activity dialog
  • Android中创建子线程的方式详解
    在 Android 中,创建子线程的方式通常有以下几种: 使用 Thread 类进行创建 Thread 是 Java 中的一个类,可以通过继承 Thread 类或者创建 Thread...
    99+
    2023-05-18
    Android创建子线程方式 Android创建子线程 Android子线程
  • 在Android中怎么实现与Activity的数据传递
    在Android中怎么实现与Activity的数据传递?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用Inten的putExtra传递第一个Activity中//创建意图对象...
    99+
    2023-05-31
    activity android roi
  • android中有哪些实现线程间通信的方法
    这篇文章给大家介绍android中有哪些实现线程间通信的方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1,通过Handler机制主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handle...
    99+
    2023-06-15
  • 在Android项目中使用RemoteViews实现跨进程更新界面
    在Android项目中使用RemoteViews实现跨进程更新界面?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现效果图在同一个应用中有两个Activity,MainActi...
    99+
    2023-05-31
    android remoteviews roi
  • Android中怎么在后台实现多线程
    Android中怎么在后台实现多线程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。后台功能是Android的四大组件之一,其重要程度自然不言而喻,而服务是Android中实现程...
    99+
    2023-06-04
  • 如何在Android开发中中实现一个App更新功能
    如何在Android开发中中实现一个App更新功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。开发环境:AndroidStudio2.1.2+gradle-2.10部分代...
    99+
    2023-05-31
    android pp roi
  • 详解Android Activity中的几种监听器和实现方式
    目录ActivityView常用事件接口设置监听的几种方法1)让Activity实现接口2) 匿名内部类3) onClick可以在xml中设置4) 实现类5) 成员变量Activit...
    99+
    2024-04-02
  • Android中实现多线程操作的几种方式
    目录前言 最基础的方式 继承Thread类并实现run()方法 匿名内部类实现Runnable接口callable+FutureTask 线程池 手动创建线程池 使用Executor...
    99+
    2024-04-02
  • 怎么在Android应用中实现一个程序更新下载功能
    这期内容当中小编将会给大家带来有关怎么在Android应用中实现一个程序更新下载功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。创建一个新类,名为UpdateManager,代码如下:impo...
    99+
    2023-05-31
    android roi
  • Service与Activity的相互通信怎么在Android项目中实现
    今天就跟大家聊聊有关Service与Activity的相互通信怎么在Android项目中实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在Android中,Activity主要负责...
    99+
    2023-05-31
    activity service android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作