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>
分享到:
相关推荐
在 Android 应用程序启动时,系统会默认创建一个主线程,也称为 UI 线程,负责处理所有的界面交互和事件分发。如果在主线程中执行耗时操作,如网络请求或大文件读取,会导致 UI 停止响应,出现“应用无响应”(ANR)...
在Android开发中,`Handler`、`Thread`、`Toast`、`消息队列`以及`线程`是实现UI交互和异步处理的关键概念。本文将深入探讨这些概念,并结合给定的"Android Handler 线程 示例代码"进行详细讲解。 首先,我们来看`...
Handler 与两个队列紧密关联:消息队列(Message Queue)和线程队列(Thread Queue)。消息队列用于存储待处理的消息对象(Message),而线程队列则管理线程的执行顺序。通过 Handler,你可以向消息队列发送消息或...
# Android Handler解析 在Android应用开发中,保持应用程序的响应...总的来说,Handler是Android开发者在进行多线程编程和UI更新时的一个强大工具。掌握Handler的使用,对于提高Android应用的性能和用户体验至关重要。
在Android开发中,`Handler`是一个至关重要的组件,它用于处理线程间的通信,特别是主线程(UI线程)与工作线程之间的交互。本文将深入探讨`Handler`的使用,帮助开发者理解如何有效地利用这一机制来更新UI、管理...
2. **Looper**:每个线程都有一个消息队列,Looper就是管理这个消息队列的类,它会不断从消息队列中取出Message并分发给相应的Handler处理。主线程默认已经有一个运行的Looper,而在自定义线程中需要手动调用`Looper...
每个线程都有一个Looper,Looper负责从消息队列中取出消息并分发给相应的Handler进行处理。当我们创建一个Handler实例时,它默认与当前线程的Looper绑定。因此,如果在主线程中创建Handler,那么它将与主线程的...
通过Handler发送消息到Message Queue,Looper会从队列中取出消息并分发,这样就可以在子线程中执行任务,然后在主线程更新UI。 4. **IntentService**:专门为处理异步任务设计的服务,它会在单独的工作线程中执行...
在Android开发中,`Handler`是一个至关重要的组件,它用于处理与UI线程相关的异步消息通信。`Handler`机制是Android系统为了实现线程间通信而设计的一种模型,尤其在处理用户界面更新时,避免了直接在非UI线程中操作...
这篇博客"进度条对话框:通过Handler实现"探讨了如何在Android中创建并更新一个进度条对话框,利用Handler机制来处理主线程与后台线程间的通信。 首先,ProgressDialog是Android提供的一个内置组件,它可以显示为...
它的主要功能是创建一个新的线程,该线程内部包含了一个Looper对象,Looper是消息队列的管理者,用于处理发送到此线程的消息。在HandlerThread中,你可以创建一个Handler,并将它与线程的Looper关联,这样就可以在这...
通过这个辅助类,我们可以轻松地在Android应用中实现线程操作进度的展示,提高用户体验,同时避免了繁琐的线程同步和消息传递逻辑。在实际项目中,你可能需要根据具体需求对这个辅助类进行扩展,例如添加任务优先级...
当工作线程中的下载任务报告进度时,通过Handler或Callback机制将进度信息传递到主线程,更新对应列表项的ProgressBar。 在多线程下载中,我们还需要考虑错误处理和下载暂停/恢复功能。可以使用try-catch-finally...
在Android系统中,有一个内置的`DownloadManager`服务,它支持多线程下载和断点续传,但可能无法满足所有自定义需求。因此,很多开发者选择自建下载管理器。自建下载管理器可以更好地控制下载过程,比如设置优先级...
在Android开发中,`Handler`是一个至关重要的组件,主要用于处理线程间的通信,尤其是在UI更新上。本示例中,“Handler的使用”主要是讲解如何利用`Handler`来更新`ProgressBar`的进度,使得进度条每秒钟能动态地...
综上所述,多线程多任务断点续传下载技术是Android开发中的一个重要实践,它涉及到并发处理、文件流操作、持久化存储以及用户界面设计等多个方面。理解并掌握这些知识点对于开发高效、用户体验良好的下载功能至关...
在Python中,可以使用`queue`模块创建一个消息队列,后台线程在完成一定工作量后向队列中放入消息,主线程定期检查队列并根据消息更新进度条。这样可以避免因直接修改界面导致的竞态条件,保证了界面的正确更新。 ...
Looper是线程中的一个循环器,它不断地检查MessageQueue,一旦有新消息,就会从队列中取出并分发给相应的Handler进行处理。Looper使得线程能够持续运行,直到线程被显式地停止,通常通过调用Looper.quit()方法来完成...
这可以通过继承`ProgressBar`并重写其`onDraw()`方法来实现,或者创建一个全新的`View`来完成。 4. **AsyncTask**:Android提供`AsyncTask`类来处理后台任务,比如文件下载。`AsyncTask`可以在线程间进行通信,更新...
`Handler`通过消息队列机制实现线程间通信,而`LiveData`是Android架构组件的一部分,提供观察者模式,能自动在主线程中更新观察者。 5. **下载管理**: 对于多任务下载,可能需要一个下载管理器来跟踪每个任务的...