现在我们已经已经知道android有Service,Handler和Thread这些内容了,但是我想应该还有很多人对此并不是很清楚他们之间的区别!
(1)Service 是运行在后端的程序,不与UI直接交互,不像Activity直接操控UI.
(2)Handler 主要用来开启一个子线程,发送异步消息给Handler,让handler来更新UI,就像web应用程序中的ajax.
(3)Thread 我想大家都很明白,开启一个新的线程。它可以在Service,Handler,Activity都可以使用,前面我的课程中,有关service的用法已经说的很详细了,什么时候用service,什么时候用Thread,都说明了。
由于前面没有重点介绍Handler的用法,这节就讲一下Handler的相关知识点;大家就把Handler想象成web中的ajax就可以了。
我将给出一个DEMO,这个例子通过发送一条消息给Handler,异步更新界面UI。
界面很简单,一个按钮,一个TextView,其初始内容为0 ,按钮点击后,每隔一秒钟,异步更新TextView的内容,让其数值不断的加1。
activity_handler.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tvCount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="127dp" android:text="0" /> <Button android:id="@+id/btnStart" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tvCount" android:layout_centerHorizontal="true" android:layout_marginTop="39dp" android:text="异步更新数据" /> </RelativeLayout>
效果如下:
HandlerDemo.java 如下:
package com.example.servicedemo; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class HandlerDemo extends Activity implements OnClickListener { private Button btnStart; private TextView tvCount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_handler); btnStart = (Button)findViewById(R.id.btnStart); tvCount = (TextView)findViewById(R.id.tvCount); btnStart.setOnClickListener(this); } /* * 异步处理UI */ Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { //获取当前发送过来的数值,更新TextView tvCount.setText(String.valueOf(msg.what)); } }; class MyThread extends Thread { @Override public void run() { while(true) { Message msg = handler.obtainMessage(); msg.what += 1; handler.sendMessage(msg); } } } @Override public void onClick(View arg0) { new MyThread().start(); } }
我们运行一下效果:
我们发现,当我们点击按钮后,发现数据从0变为1后就停止不动了,我们明明在开启新的线程里,做了个while(true)一直循环的啊,怎么到1后,就不动了啊,应该效果是隔1秒,就自增1啊。
好,问题出现了,我们就要去解决啊,下节课,我们将给出解决的DEMO.
转载请注明http://www.cnblogs.com/yushengbo,否则将追究版权责任!