【发布时间】:2020-07-02 18:13:39
【问题描述】:
这是我的主要活动:
package com.eddieharari.threadtest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import java.util.logging.Logger;
public class MainActivity extends AppCompatActivity {
counter MyCounter = new counter("MyCounter");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView txt = findViewById(R.id.textView);
Button button = findViewById(R.id.button);
Button skipButton = findViewById(R.id.button2);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("threadtest","Button Was Cliecked");
MyCounter.start();
}
});
skipButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (MyCounter.myHandler != null) {
Log.d("threadtest","Sending message to thread");
Message msg = MyCounter.myHandler.obtainMessage();
MyCounter.myHandler.sendMessage(msg);
}
}
});
}
}
基本上有 2 个按钮,一个用于启动线程,另一个用于向该线程发送消息, 这是线程类:
package com.eddieharari.threadtest;
import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
import android.util.Log;
import androidx.annotation.NonNull;
public class counter extends Thread {
public Handler myHandler;
int mCounter;
int mJumps;
public counter(@NonNull String name) {
super(name);
mCounter = 0;
mJumps = 1;
}
@SuppressLint("HandlerLeak")
@Override
public void run() {
super.run();
Log.d("thradtest","Thread had started!");
Looper.prepare();
myHandler=new Handler(){
public void HandleMessage(Message m) {
Log.d("threadtest","Inside Handler");
if (m.what == 0) {
Log.d("threadtest","Got Message 0");
}
}
};
Looper.loop();
}
}
当我运行这个示例时,线程启动,但是我不确定 Looper.loop() 究竟做了什么,因为线程没有收到消息,或者至少我可以说线程处理程序没有向我发送得到消息 0 的调试日志行。
【问题讨论】:
标签: android multithreading handler looper