android 학습의--Handler 메시지 전달 메커니즘
5148 단어 안드로이드 학습 여행
Handler 클래스 소개:
Handler 클래스의 주요 역할:
Handler 클래스에는 메시지를 전송하고 처리하는 다음과 같은 방법이 있습니다.
ImageView 。
public class MainActivity extends Activity {
// ID
int[] imagesId = new int[]{
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e
};
int currentImageId = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView show = (ImageView) findViewById(R.id.show);
final Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
//
if(msg.what == 0x123){
// ID
show.setImageResource(imagesId[currentImageId++]);
if(currentImageId>4){
currentImageId = 0;
}
}
}
};
// ,
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
// Activity
// Handler
Message msg = new Message();
msg.what = 0x123;
//
mHandler.sendMessage(msg);
}
}, 0, 800);
}
}
새 스레드가 메시지를 보낼 때handler의handle Message(Message msg) 방법은Activity에서 구성 요소의 속성을 바꾸기 위해 자동으로 리셋됩니다.Handler와 함께 작동하는 여러 구성 요소(Handler의 작동 원리를 더 잘 이해하기 위해):
private Looper(){
mQueue = new MessageQueue();
mRn = true;
mThread = Thread.currentThread();
}
원본 코드를 통해 알 수 있듯이 구조기를 통해 Looper 대상을 만들 수 없습니다. 프로그램은 Looper를 초기화할 때 이와 관련된 MessageQueue를 만들 것입니다. 이 MessageQueue는 메시지를 관리합니다.Handler가 올바르게 작동하려면 현재 스레드에 Looper 객체가 있어야 합니다.
스레드에서 Handler를 사용하려면
예: 새로운 라인을 이용하여 질수를 계산하다
public class MainActivity extends Activity {
//2~UPPER_NUM
static final String UPPER_NUM = "upper";
EditText etNum;
//
CalThread calThread;
class CalThread extends Thread{
public Handler handler;
public void run(){
//Looper prepare Looper , MessageQueue
Looper.prepare();
handler = new Handler(){
//
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
if(msg.what==0x123){
// 2 upper
int upper = msg.getData().getInt(UPPER_NUM);
List nums = new ArrayList();
outer:
for(int i = 2;i
이 프로그램을 실행하면 입력한 데이터에 따라 이 범위 내의 질량을 계산하여 새로운 라인에 맡기고 프런트 UI는 영향을 받지 않는다.