=======================================

节选如下,,完整在附件

=======================================

14 处理线程

android中我们也可以通过线程来进行多任务协同合作的。

我们可以使用传统的Thread来处理,也可使用Android为我们提供的新的处理方法Handle的处理方式来进行。那么我们通过几个例子来学习如何在Android中进行线程处理的~

1:进度条对话框(ProgressDialog)的使用

ProgressDialog这个部件在Android中用于获取屏幕焦点,显示出一个如“加载中”的对话框,

正如API中提到的,这个部件在显示的时候,可以显示文本或者一个视图(View)。我们可以使用手机上的返回键来取消这个进度对话框。

那么我们来看下下面这个例子,了解下这个部件的使用方法

先看代码

package com.commonsware.android;

import android.app.Activity;

import android.app.ProgressDialog;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class Now extends Activity {

Button btn;

ProgressDialog dig = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

btn = (Button) findViewById(R.id.btn01);

btn.setOnClickListener(lis);

}

Button.OnClickListener lis = new Button.OnClickListener() {

public void onClick(View v) {

final CharSequence title = getString(R.string.title);

final CharSequence body = getString(R.string.body);

dig = ProgressDialog.show(Now.this, title, body);

new Thread() {

public void run() {

try {

sleep(2000);

} catch (Exception e) {

e.printStackTrace();

} finally {

dig.dismiss();

}

}

}.start();

}

};

}

这里,创建了一个进度条对话框,然后通过按钮的点击来使它显示出来~

接下来,我们使用了一个线程

点击按钮,线程启动

这里需要注意的是,在finally里,我们一定要调用进度条对话框的dismiss()方法,不然会无限循环的~

这个方法来自 progressdialog的父类Dialog.

补充说明下,使用ProgressDialog的时候,我们注意到,在应用时,必须新建一个ProgressDialog对象,在运行时会弹出这个对话框作为提醒,此时应用程序后台失去焦点,直到线程结束后,才会将主控权交给应用程序。

那么,如果我们在Activity中,不希望后台失去焦点,又希望提示用户有某后台程序正处于忙碌阶段,此时我们就可以使用下面的一个部件了~~

ProgressBar

Android提供的ProgressBarProgressDialog不一样,它可以一开始就在layout中布局添加,而Dialog是在运行时生成的。

我们可以先将ProgressBar一开始设置为隐藏,而后在程序中来让它显示。

那么在使用ProgressBar的时候,我们需要与Android为我们提供的另外两个类进行配合使用: Handler,Message

掌握Handler

android中,使用后台线程的最灵活的方式就是去创建一个Handler类的子类。因为在android中,你新启动的进程是无法访问Activity中的部件的,也无法将运行状态传出来,所以需要通过HandlerMessage对象,将进程中状态向外传递,最后由ActivityHandler事件接受运行状态。

Messages

我们第一步需要调用obtainMessage()方法,获得指定的Message,然后把这个Message对象发送给HandlerObtainMessage()方法有几个用处,允许你创建一个空的Message,或者生成几个带有参数的messageHandler需要处理的最复杂的情况是,你可能需要在Message中存放一些数据,然后传递给Handler,让Handler处理各种事件。

接下来,通过信息队列(message queue),你就可以传递Message了。需要调用下面的几个方法之一:

l sendMessage() 立刻传递Message

l sendMesaageAtFrontQueue() :把你的message放在队列的前端,使你的信息有优先权

l sendMessageAtTime() ,指定发送时间,以毫秒的形式来表示

l sendMessageDelayed():经过一段时间后,再把message放到队列中,也是毫秒

要想处理Message,你的Handler需要实现 handleMessage() 方法。只要Handler接受到了一个Message,这个方法就会被调用。这样,handler就可以根据具体的需要来更新你的UI了。

那么。我们来看下面这个例子吧:

界面如下:

我们来看代码

首先布局中添加了一个progressBar

<?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"

>

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

<ProgressBar android:id="@+id/progress"

style="?android:attr/progressBarStyleHorizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:max="100"

>

</ProgressBar>

</LinearLayout>

更多相关文章

  1. Android(安卓)Volley 库通过网络获取 JSON 数据
  2. 在ubuntu上编译android的mupdf
  3. 在Android中使用Handler和Thread线程执行后台操作
  4. 【Android】数据存储之SQLite
  5. ubuntu x64 android sdk adb No such file or directory
  6. 【Android】数据存储之SQLite
  7. 【Android】数据存储之Network
  8. ImageView 设置 maxWidth/maxHeight 和 adjustViewBounds
  9. Android的线程使用来更新UI----Thread、Handler、Looper、TimerT

随机推荐

  1. Android 中处理POWER/HOME流程
  2. 如何解决android NDK r8c 老是重新编译源
  3. C#开发android应用实战 源码
  4. android中The connection to adb is down
  5. 2011.08.15(2)——— android audioManager
  6. android去掉标题的方法
  7. 使用greenDao操作本地数据库,Android9.0读
  8. Android(安卓)开发之Android(安卓)应用程
  9. Android(安卓)Studio 开发,找不到android.
  10. Android 解屏代码