我是Android世界的初学者,我现在正在与一些概念斗争。其中之一是Handler对象。我已经重新研究了这个主题,但我仍然没有完全理解这个主题。我可能会混淆一些概念。 这是我写的一个简单的应用程序,它在屏幕上显示了一个进度条。
package com.example.mjack.progressbarthread;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
Handler mHandler;
ProgressBar mProgressBar;
TextView mTextView;
Thread myThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mTextView = (TextView) findViewById(R.id.textview);
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
mProgressBar.setProgress(msg.arg1);
mTextView.setText("Progress.... " + (msg.arg1 +1) + " %");
if (msg.arg1 == 99) {
mTextView.setText("Done!!!");
}
}
};
myThread = new Thread(new MyRunnable());
myThread.start();
}
class MyRunnable implements Runnable {
@Override
public void run() {
for (int i = 0; i<100; i++) {
Message message = mHandler.obtainMessage();
message.arg1 = i;
mHandler.sendMessage(message);
try {
myThread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
据我所知,到目前为止(如果我错了,请纠正我): 1.主线程已经连接了一个Looper和Handler,以便能够执行排队任务(不像新线程,我必须准备()一个Looper并实例化一个Handler)。 2.只有一个处理程序可以在特定时间附加到一个线程(直到它被一个新实例化的Handler对象替换)。
我的问题是:如果我在主线程中创建一个新的Handler并且它现在附加到线程并处理来自我的后台线程的消息(通过重写的handleMessage方法),如果我单击一个按钮会发生什么例如,当Handler仍在处理来自后台线程的消息的过程中时,该活动(如果我有一个按钮在我的布局中执行某些操作)?什么对象处理按钮单击事件(考虑到可能存在多个事件,是否必须通过处理程序?)
我希望我已经足够清楚了。谢谢。