首页 > 代码库 > android中handler的使用之一
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 <TextView12 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 @Override10 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 block20 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 @Override12 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,让主线程来更新ui19 handler.post(new Runnable() {20 21 @Override22 public void run() {23 // TODO Auto-generated method stub24 try {25 Thread.sleep(1000);26 } catch (InterruptedException e) {27 // TODO Auto-generated catch block28 e.printStackTrace();29 }30 textview.setText("updata");31 }32 });33 34 };35 }.start();36 }37 38 }
android中handler的使用之一
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。