안드로이드 개발 질문/답변
(글 수 45,052)
private Runnable myThread = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while (myProgress<100){
try{
myHandle.sendMessage(myHandle.obtainMessage());
Thread.sleep(1000);
}
catch(Throwable t){}
}
//finish();
onCreateToast(DIALOG_DOWNLOAD);
progressDialog.dismiss();
}
Handler myHandle = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
myProgress+=50;
progressDialog.setProgress(myProgress);
}
};
};
public void onCreateToast(int id) {
/setContentView(R.layout.main);
switch (id) {
case DIALOG_DOWNLOAD: {
Toast toast = Toast.makeText(this,"Download Complete",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
}
case DIALOG_UPDATE: {
Toast toast = Toast.makeText(this,"Update Complete",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
}
default:
}
Intent intent = new Intent(AndroidUiDialogTask.this, AndroidUi.class);
startActivity(intent);
finish();
}
ProgressDialog 진행 후 Thread를 dismiss하기 전에 onCreateToast를 호출 하려고 하는데 예외가 발생합니다.
혹시 이유를 알고 계신 분은 답변 부탁드립니다.
@Override
public void run() {
// TODO Auto-generated method stub
while (myProgress<100){
try{
myHandle.sendMessage(myHandle.obtainMessage());
Thread.sleep(1000);
}
catch(Throwable t){}
}
//finish();
onCreateToast(DIALOG_DOWNLOAD);
progressDialog.dismiss();
}
Handler myHandle = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
myProgress+=50;
progressDialog.setProgress(myProgress);
}
};
};
public void onCreateToast(int id) {
/setContentView(R.layout.main);
switch (id) {
case DIALOG_DOWNLOAD: {
Toast toast = Toast.makeText(this,"Download Complete",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
}
case DIALOG_UPDATE: {
Toast toast = Toast.makeText(this,"Update Complete",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
}
default:
}
Intent intent = new Intent(AndroidUiDialogTask.this, AndroidUi.class);
startActivity(intent);
finish();
}
ProgressDialog 진행 후 Thread를 dismiss하기 전에 onCreateToast를 호출 하려고 하는데 예외가 발생합니다.
혹시 이유를 알고 계신 분은 답변 부탁드립니다.
2010.03.31 23:35:28
Toast라고 할지라도 스레드 사용중에 표시할 수 없습니다.
(개인적으로 안드로이드에서 제일 맘에 안드는 제한사항중에 하나입니다.)
onCreateToast 메서드에서 runOnUIThread를 호출하셔서 스레드를 하나 더 만드시는수 밖에 없습니다.
토스트 메세지 하나 띄우는데도, 일일히 스레드 중인지 스레드중이 아닌지 구분하는건 너무 귀찮은 작업입니다.
저는 그게 귀찮아서 MessageHandler를 이용한 Helper 클래스를 만들었습니다.
이렇게 만들어 두니까 스레드 실행중인지 구분할 필요가 없어서 좋더군요.
public final class ToastHandler extends Handler {
Context mContext;
public ToastHandler(Context context) {
mContext = context;
}
@Override
public final void handleMessage(Message msg) {
if(msg != null) {
Toast.makeText(mContext, msg.what, Toast.LENGTH_SHORT).show();
}
}
public final void showToast(int resId) {
sendEmptyMessage(resId);
}
}