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

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

效果如下:
淘宝(阿里百川)手机客户端开发日记第七篇 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();

    }

    

    

}
View Code

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

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

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

 

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

 

你可能感兴趣的:(service)