淘宝(阿里百川)手机客户端开发日记第七篇 Service,Handler和Thread

时间:2023-03-08 22:03:21

现在我们已经已经知道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>

效果如下:
淘宝(阿里百川)手机客户端开发日记第七篇 Service,Handler和Thread

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();
    }

}

我们运行一下效果:
淘宝(阿里百川)手机客户端开发日记第七篇 Service,Handler和Thread

我们发现,当我们点击按钮后,发现数据从0变为1后就停止不动了,我们明明在开启新的线程里,做了个while(true)一直循环的啊,怎么到1后,就不动了啊,应该效果是隔1秒,就自增1啊。

好,问题出现了,我们就要去解决啊,下节课,我们将给出解决的DEMO.

转载请注明http://www.cnblogs.com/yushengbo,否则将追究版权责任!