gpt4 book ai didi

android - 为什么要使用处理程序?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:12 25 4
gpt4 key购买 nike

我在非常基础的 Handler 教程中看到了这段代码。代码工作正常,但我不明白为什么我必须为 progressDialog.dismiss() 使用 Handler ???我删除了 Handler 部分并将 progressDialog.dismiss() 放在 run() 方法中,它工作正常。那为什么要用Handler???

 import android.app.Activity;
import android.app.ProgressDialog;
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.Toast;


public class HandlerThread extends Activity{

private Button start;
private ProgressDialog progressDialog;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.Button01);
start.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
fetchData();
}

});
}



protected void fetchData() {
// TODO Auto-generated method stub
progressDialog = ProgressDialog.show(this, "", "Doing...");
new Thread() {
public void run() {
try {

Thread.sleep(8000);

} catch (InterruptedException e) {

}
messageHandler.sendEmptyMessage(0);

}
}.start();


}



private Handler messageHandler = new Handler() {

public void handleMessage(Message msg) {
super.handleMessage(msg);
progressDialog.dismiss();

}
};
}

最佳答案

为什么要在Android中使用Handler?


首先:让我们知道什么是线程:

  • 线程有助于多任务处理
  • 线程可以作为在主进程下运行的小进程来教授
  • 线程至少支持并行执行

其次:让我们了解应用线程:-

  • 当 android 应用程序首次启动时,运行时系统将创建一个主线程,该主线程将负责执行 android 中的所有组件

Android UI-Toolkit 不是线程安全的

  • 如前所述,android 主线程中有许多组件,现在假设其中一个组件需要很长时间才能执行,那么这会使主线程无响应并且它会显示应用程序无响应
  • 子线程不能直接操作应用程序(主)线程在安卓系统中
  • Handler 充当接口(interface)并收集来自子线程并逐一更新主应用程序线程作为消息到达,线程处理程序在主线程中实现。

处理程序类:

  • 为了多线程的目的,我们将使用处理程序类,它来自包 android.os.Handler
  • 每个线程都由处理程序类的一个实例处理

Figure

  • 从上图我们可以看出,每个线程由一个处理程序类的实例
  • 线程在消息的帮助下相互通信
  • 这个处理程序类有助于保持某种同步协调 b/w线程通过允许它们一起运行实现多线程

处理程序实例已创建

Handler handlerObject = new Handler();

关于使用处理程序的最后一部分是使用可运行接口(interface):

  • handler类利用runnable接口(interface)实现多线程
  • 我们重写 run 方法来执行一个线程指定的次数

Class NameOfClass implements Runnable
{
Public void run()
{
//Body of run method
}
}

将所有内容放在一起

//Create handler in the thread it should be associated with 
//in this case the UI thread
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
public void run() {
while(running){
//Do time consuming stuff

//The handler schedules the new runnable on the UI thread
handler.post(new Runnable() {
//Ex.. using progressbar to set the pogress
//Updating the UI is done inside the Handler
});
}
}
};
new Thread(runnable).start();

关于android - 为什么要使用处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12312926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com