Вот мое основное занятие:
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.l oop (), поскольку поток не получает сообщение, или, по крайней мере, я могу сказать, что обработчик потока не отправив мне строку журнала отладки, чтобы он получил сообщение 0.