`
暴风雪
  • 浏览: 387913 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[Android]简单的Handler样例,通过线程队列和消息队列操作一个ProgressBar

阅读更多

      Handler主要用于异步消息的处理。

      这里点击了按钮之后在run方法中设置message的alg1的值,每次通过sendMessage把message对象压入消息队列。在handleMessage方法中取出消息队列中的message对象,并设置progressBar的值,然后再把线程对象加入线程队列。这个循环一直运行到进度条走到头~~。

 

package com.example.prograssbarhandle;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

public class MainActivity extends Activity {
	private ProgressBar pb1=null;
	private Button bt1=null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt1=(Button)findViewById(R.id.but);
        pb1=(ProgressBar)findViewById(R.id.firstBar);
        pb1.setVisibility(View.VISIBLE);
        bt1.setOnClickListener(new bt1listener());
    }	

    class bt1listener implements OnClickListener{

		public void onClick(View arg0) {
			// TODO Auto-generated method stub
			hl1.post(run1);
		}
    	
    }
    
    Handler hl1=new Handler()
    {

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			pb1.setProgress(msg.arg1);
			hl1.post(run1);
		}
    	
    };
    
    Runnable run1=new Runnable()
    {
    	int i=0;
		public void run() {
			// TODO Auto-generated method stub
			i+=10;
			//得到一个消息对象
			Message msg=hl1.obtainMessage();
			msg.arg1=i;
			try{
				Thread.sleep(1000);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
			if(i>=100){
				i=0;
				pb1.setProgress(i);
		//		bt1.setText("dawda");
				hl1.removeCallbacks(run1);
				return;
			}
			hl1.sendMessage(msg);
		}
    	
    };
     
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        tools:context=".MainActivity" />
    <Button 
        android:id="@+id/but"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="start"
        />
    <ProgressBar
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:id="@+id/firstBar"
        style="?android:attr/progressBarStyleHorizontal" 
        />

</LinearLayout>
 
0
0
分享到:
评论

相关推荐

    android-Handler的使用

    在 Android 应用程序启动时,系统会默认创建一个主线程,也称为 UI 线程,负责处理所有的界面交互和事件分发。如果在主线程中执行耗时操作,如网络请求或大文件读取,会导致 UI 停止响应,出现“应用无响应”(ANR)...

    Android Handler 线程 示例代码

    在Android开发中,`Handler`、`Thread`、`Toast`、`消息队列`以及`线程`是实现UI交互和异步处理的关键概念。本文将深入探讨这些概念,并结合给定的"Android Handler 线程 示例代码"进行详细讲解。 首先,我们来看`...

    android Handler

    Handler 与两个队列紧密关联:消息队列(Message Queue)和线程队列(Thread Queue)。消息队列用于存储待处理的消息对象(Message),而线程队列则管理线程的执行顺序。通过 Handler,你可以向消息队列发送消息或...

    Android Handler解析

    # Android Handler解析 在Android应用开发中,保持应用程序的响应...总的来说,Handler是Android开发者在进行多线程编程和UI更新时的一个强大工具。掌握Handler的使用,对于提高Android应用的性能和用户体验至关重要。

    android Handler的使用(一)

    在Android开发中,`Handler`是一个至关重要的组件,它用于处理线程间的通信,特别是主线程(UI线程)与工作线程之间的交互。本文将深入探讨`Handler`的使用,帮助开发者理解如何有效地利用这一机制来更新UI、管理...

    Android Handler模拟进度条更新

    2. **Looper**:每个线程都有一个消息队列,Looper就是管理这个消息队列的类,它会不断从消息队列中取出Message并分发给相应的Handler处理。主线程默认已经有一个运行的Looper,而在自定义线程中需要手动调用`Looper...

    Android中的Handler与多线程应用实例

    每个线程都有一个Looper,Looper负责从消息队列中取出消息并分发给相应的Handler进行处理。当我们创建一个Handler实例时,它默认与当前线程的Looper绑定。因此,如果在主线程中创建Handler,那么它将与主线程的...

    Android的Thread & ProgressBar

    通过Handler发送消息到Message Queue,Looper会从队列中取出消息并分发,这样就可以在子线程中执行任务,然后在主线程更新UI。 4. **IntentService**:专门为处理异步任务设计的服务,它会在单独的工作线程中执行...

    android中的Handler(1)

    在Android开发中,`Handler`是一个至关重要的组件,它用于处理与UI线程相关的异步消息通信。`Handler`机制是Android系统为了实现线程间通信而设计的一种模型,尤其在处理用户界面更新时,避免了直接在非UI线程中操作...

    进度条对话框:通过Handler实现

    这篇博客"进度条对话框:通过Handler实现"探讨了如何在Android中创建并更新一个进度条对话框,利用Handler机制来处理主线程与后台线程间的通信。 首先,ProgressDialog是Android提供的一个内置组件,它可以显示为...

    HandlerThread,AsyncTask,Handler的一个小例子

    它的主要功能是创建一个新的线程,该线程内部包含了一个Looper对象,Looper是消息队列的管理者,用于处理发送到此线程的消息。在HandlerThread中,你可以创建一个Handler,并将它与线程的Looper关联,这样就可以在这...

    android 线程操作进度展示辅助类

    通过这个辅助类,我们可以轻松地在Android应用中实现线程操作进度的展示,提高用户体验,同时避免了繁琐的线程同步和消息传递逻辑。在实际项目中,你可能需要根据具体需求对这个辅助类进行扩展,例如添加任务优先级...

    多线程分别下载文件

    当工作线程中的下载任务报告进度时,通过Handler或Callback机制将进度信息传递到主线程,更新对应列表项的ProgressBar。 在多线程下载中,我们还需要考虑错误处理和下载暂停/恢复功能。可以使用try-catch-finally...

    Android应用源码之多线程断点下载.zip

    在Android系统中,有一个内置的`DownloadManager`服务,它支持多线程下载和断点续传,但可能无法满足所有自定义需求。因此,很多开发者选择自建下载管理器。自建下载管理器可以更好地控制下载过程,比如设置优先级...

    Handler的使用

    在Android开发中,`Handler`是一个至关重要的组件,主要用于处理线程间的通信,尤其是在UI更新上。本示例中,“Handler的使用”主要是讲解如何利用`Handler`来更新`ProgressBar`的进度,使得进度条每秒钟能动态地...

    多线程多任务断点续传下载

    综上所述,多线程多任务断点续传下载技术是Android开发中的一个重要实践,它涉及到并发处理、文件流操作、持久化存储以及用户界面设计等多个方面。理解并掌握这些知识点对于开发高效、用户体验良好的下载功能至关...

    多线程进度条控制基本方法演示

    在Python中,可以使用`queue`模块创建一个消息队列,后台线程在完成一定工作量后向队列中放入消息,主线程定期检查队列并根据消息更新进度条。这样可以避免因直接修改界面导致的竞态条件,保证了界面的正确更新。 ...

    了解Android核心:Looper,Handler和HandlerThread

    Looper是线程中的一个循环器,它不断地检查MessageQueue,一旦有新消息,就会从队列中取出并分发给相应的Handler进行处理。Looper使得线程能够持续运行,直到线程被显式地停止,通常通过调用Looper.quit()方法来完成...

    android下载滚动条

    这可以通过继承`ProgressBar`并重写其`onDraw()`方法来实现,或者创建一个全新的`View`来完成。 4. **AsyncTask**:Android提供`AsyncTask`类来处理后台任务,比如文件下载。`AsyncTask`可以在线程间进行通信,更新...

    Android-Android仿应用宝下载进度条

    `Handler`通过消息队列机制实现线程间通信,而`LiveData`是Android架构组件的一部分,提供观察者模式,能自动在主线程中更新观察者。 5. **下载管理**: 对于多任务下载,可能需要一个下载管理器来跟踪每个任务的...

Global site tag (gtag.js) - Google Analytics