当前位置:操作系统 > 安卓/Android >>

Android学习笔记(五) handler

一、基本概念

 在手机使用时,经常碰到这种情况:比如在我们下载的时候,若是将下载方法单独为一个Activity的时候,那么下载时,其他的Activity是没有响应的,那么这个时候整部手机就处于了当机的状态,而Handler就是用来解决这个问题的.
 意思就是说,将下载放在一个单独的线程,那么当这个线程执行的时候,并不会影响该Activity的线程.
二、使用方法

 通过调用handler的post方法实现线程的操作.
一个最简单的Handler例子:
XML文件:
 
Java代码 
<span style="font-size: x-small;"><?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:weightSum="1"> 
<Button  
        android:id="@+id/start" 
        android:text="@string/opt_start" 
        android:layout_height="wrap_content" 
        android:layout_weight="0.38"  
        android:layout_width="202dp"/> 
<Button  
        android:layout_height="wrap_content"  
        android:id="@+id/end"  
        android:text="@string/opt_end"  
        android:layout_weight="0.38"  
        android:layout_width="202dp"> 
        </Button> 
</LinearLayout> 
</span> 
 
 
Handler文件:
 
Java代码 
<span style="font-size: x-small;">package com.hadler; 
 
 
import android.accounts.Account; 
import android.accounts.OnAccountsUpdateListener; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.text.style.UpdateAppearance; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
 
public class Handlertest extends Activity { 
    /** Called when the activity is first created. */ 
    private Button start; 
    private Button end; 
     
    OnClickListener start_listen = null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        start = (Button)findViewById(R.id.start); 
        end = (Button)findViewById(R.id.end); 
         
        start_listen = (new OnClickListener(){ 
             
            @Override 
            public void onClick(View v) { 
                // TODO Auto-generated method stub 
                //调用handler的post方法,将要执行的线程对象加到队列当中 
                handler.post(updateThread); 
            } 
             
        }); 
             
 
        start.setOnClickListener(start_listen); 
         
        OnClickListener end_listen = (new OnClickListener() { 
             
            @Override 
            public void onClick(View arg0) { 
                // TODO Auto-generated method stub 
                handler.removeCallbacks(updateThread); 
                 
            } 
        }); 
        end.setOnClickListener(end_listen); 
    } 
     
         
    //创建一个Handler对象 
    Handler handler = new Handler(); 
     
    //线程类,实现Runnable接口,将要执行的操作写在run方法中 
    Runnable updateThread = new Runnable(){ 
 
        @Override 
        public void run() { 
            // TODO Auto-generated method stub 
            System.out.println("UpdateThread"); 
            //在run方法内部,执行postDelayed或者post方法 
            handler.postDelayed(updateThread, 3000); 
            } 
         
    }; 
     
}</span> 
 
这个例子中可看到LogCat中每隔3秒中就打印一句UpdateThread.
即是,不影响当前Acvtivity,调用新的进程完成的代码段. 也就是异步处理.
 
 
三、使用handler更新ProgressBar进度条

接着看一个例子,更新进度条的
 
Java代码 
<span style="font-size: x-small;"> package mars.barhandler; 
 
import android.app.Activity; 
import android.os.Bundle;&n

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,