Skip to content

Instantly share code, notes, and snippets.

@ShangjinTang
Created October 29, 2023 14:25
Show Gist options
  • Save ShangjinTang/df434e193eba314fd00bdf293d0a6f04 to your computer and use it in GitHub Desktop.
Save ShangjinTang/df434e193eba314fd00bdf293d0a6f04 to your computer and use it in GitHub Desktop.
ExampleHandlerThread
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/startThreadButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.593" />
<Button
android:id="@+id/startThreadButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="startThread"
android:text="startThread"
app:layout_constraintBottom_toTopOf="@+id/stopThreadButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/taskFooButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="executeTaskFoo"
android:text="taskFoo"
app:layout_constraintBottom_toTopOf="@+id/taskBarButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/stopThreadButton" />
<Button
android:id="@+id/taskBarButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="executeTaskBar"
android:text="taskBar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/taskFooButton" />
<Button
android:id="@+id/stopThreadButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="stopThread"
android:text="stopThread"
app:layout_constraintBottom_toTopOf="@+id/taskFooButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/startThreadButton" />
</androidx.constraintlayout.widget.ConstraintLayout>
package com.example.handlerthread;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.util.Log;
public class ExampleHandlerThread extends HandlerThread {
private static final String TAG = "ExampleLooperThread";
public Handler handler;
public Looper looper;
public ExampleHandlerThread() {
super("ExampleLooperThread");
}
@Override
public void run() {
Log.d(TAG, "run() called");
Looper.prepare();
looper = Looper.myLooper();
handler = new Handler(Looper.getMainLooper());
Looper.loop();
}
}
package com.example.handlerthread;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private final ExampleHandlerThread handlerThread = new ExampleHandlerThread();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void startThread(View view) {
Log.d(TAG, "startThread() called");
handlerThread.start();
}
public void stopThread(View view) {
Log.d(TAG, "stopThread() called");
handlerThread.looper.quit();
}
public void executeTaskFoo(View view) {
Log.d(TAG, "executeTaskFoo() called");
Handler fooThreadHandler = new Handler(handlerThread.looper);
fooThreadHandler.post(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
Log.d(TAG, "executeTaskFoo: " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
Log.d(TAG, "executeTaskFoo: run: ended");
}
});
}
public void executeTaskBar(View view) {
Log.d(TAG, "executeTaskBar() called");
Handler barThreadHandler = new Handler(handlerThread.looper);
barThreadHandler.post(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 3; i++) {
Log.d(TAG, "executeTaskBar: " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
Log.d(TAG, "executeTaskFoo: run: ended");
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment