android中handler的使用之一
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中handler的使用之一相关的知识,希望对你有一定的参考价值。
handler是安卓中用于消息传递的机制,通常用于ui线程的更新。我们知道,子线程即非UI线程是不能更新ui的,因此这个得让handler大显神威。
例如下面就是一个简单的子线程的更新的ui的事例,记住:下面的事例是错误的
xml代码:
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:paddingBottom="@dimen/activity_vertical_margin" 6 android:paddingLeft="@dimen/activity_horizontal_margin" 7 android:paddingRight="@dimen/activity_horizontal_margin" 8 android:paddingTop="@dimen/activity_vertical_margin" 9 tools:context="com.example.android_handler1.MainActivity" > 10 11 <TextView 12 android:id="@+id/textview" 13 android:layout_width="wrap_content" 14 android:layout_height="wrap_content" 15 android:text="@string/hello_world" /> 16 17 </RelativeLayout>
java代码:
1 package com.example.android_handler1; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.widget.TextView; 6 7 public class MainActivity extends Activity { 8 private TextView textview = null; 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.activity_main); 13 textview = (TextView) findViewById(R.id.textview); 14 new Thread(){ 15 public void run() { 16 try { 17 Thread.sleep(1000); 18 } catch (InterruptedException e) { 19 // TODO Auto-generated catch block 20 e.printStackTrace(); 21 } 22 textview.setText("updata"); 23 }; 24 }.start(); 25 } 26 27 }
当我们运行起这段代码后,会发现程序会闪退,错误的原因就在于子线程去更新了ui,这时错误的做法。通常我们使用handler来通知主线程即ui线程来更新ui。
因此我们只需把代码改成这样就行:
1 package com.example.android_handler1; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.widget.TextView; 7 8 public class MainActivity extends Activity { 9 private TextView textview = null; 10 private Handler handler = new Handler(); 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 textview = (TextView) findViewById(R.id.textview); 16 new Thread(){ 17 public void run() { 18 //利用handler来传递一个post,让主线程来更新ui 19 handler.post(new Runnable() { 20 21 @Override 22 public void run() { 23 // TODO Auto-generated method stub 24 try { 25 Thread.sleep(1000); 26 } catch (InterruptedException e) { 27 // TODO Auto-generated catch block 28 e.printStackTrace(); 29 } 30 textview.setText("updata"); 31 } 32 }); 33 34 }; 35 }.start(); 36 } 37 38 }
以上是关于android中handler的使用之一的主要内容,如果未能解决你的问题,请参考以下文章