首页 > 代码库 > Android UI编程(4)——Thread、Message、Handler
Android UI编程(4)——Thread、Message、Handler
当应用程序启动时,会开启一个主线程(也就是UI线程),由它来管理UI,监听用户点击,来响应用户并分发事件等。所有一般在主线程中不要执行比较耗时的操作,如延时、下载网络数据、死循环,否则出现ANR错误。所以就将这些操作放在子线程中,但是由于Android UI线程是不安全的,所有只能在主线程中更新UI。使用Thread来创建子线程、使用Message来存储数据、使用Handler来处理消息数据。
总结:
1、子线程与UI主线程之间通过Message来传递数据,需要创建一个新类(MyHandler)并继承Handler,然后重载handleMessage(Message msg)方法来处理不同的消息
2、子线程使用上面创建的新类(MyHandler)的实例化对象的sendMessage(message)将消息发送到消息队列中去
3、在子线程创建一个Message实例化对象,使用Message.obtain();创建一个空消息(API中建议使用Message.obtain(),而不使用new Message())。
AndroidManifest.xml——没有做任何修改,创建工程默认生成的
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.wxl.handler_message" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.wxl.handler_message.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" tools:context=".MainActivity" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </LinearLayout>MainActivity.java
package com.wxl.handler_message; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.widget.TextView; import android.app.Activity; public class MainActivity extends Activity { private TextView textView; private MyHandler handler; private MyThread thread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView)findViewById(R.id.textView); handler = new MyHandler(); thread = new MyThread(); thread.start(); } public class MyThread extends Thread{ private int count = 0; @Override public void run() { // TODO Auto-generated method stub super.run(); while (true) { try { Thread.sleep(1000); Message message = Message.obtain(); message.what = 1; if (60 == count) { count = 0; } message.obj = ++count; handler.sendMessage(message);</span> } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public class MyHandler extends Handler { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case 1: { textView.setText(""+msg.obj); } break; default: break; } } } }
Android UI编程(4)——Thread、Message、Handler
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。