티스토리 뷰
728x90
반응형
안드로이드에서 쓰레드 루프 중에 쓰레드를 멈추고 Modal Dialog를 받는 방법을 예제로 만들어 보았다. 동기화에 사용되는 오브젝트는 Object lock으로 wait/notify를 사용하였다.
package com.example.a1000149.androidthreadtest;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Object lock = new Object();
void showAlert() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
AlertDialog dialog = builder.setTitle("title")
.setMessage("message")
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
releaseLock();
}
})
.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
releaseLock();
}
})
.setNeutralButton("skip", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
releaseLock();
}
})
// 백버튼 불가, 바탕화면 클릭 불가
.setCancelable(false)
.create();
dialog.show();
}
void releaseLock() {
synchronized (lock) {
lock.notify();
Log.e("TAG", "notify");
}
}
Runnable runnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
runnable = new Runnable() {
@Override
public void run() {
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
showAlert();
}
});
Log.e("TAG", "before wait");
synchronized (lock) {
lock.wait();
}
Log.e("TAG", "after wait");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Button btn = (Button) findViewById(R.id.hello);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(runnable).start();
}
});
}
}
반응형
'모바일 프로그래밍' 카테고리의 다른 글
Android Studio NDK: could not load library “libgnustl_shared.so” (0) | 2018.04.15 |
---|---|
Android Only fullscreen opaque activities can request orientation (0) | 2018.02.05 |
Android Firebase, Google Analytics 디버그시 수집 중지 (0) | 2017.12.13 |
Android Graphics Architecture - (2) SurfaceFlinger와 Hardware Composer (0) | 2017.12.01 |
Android Graphics Architecture - (1) BufferQueue와 gralloc (0) | 2017.11.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday