特定のプロセスのスレッドを作成し、進行ダイアログと同時にこのスレッドを実行しています。プロセスが完了すると、進行状況ダイアログが閉じます。これまで問題はありませんが、ユーザーが電話の戻るボタンを 2 回押すと、アクティビティが破棄され、プロセスが停止するはずです。そのため、onDestroy() でスレッドを停止しました。しかし、私のコードでアプリがクラッシュしmt.stop()
、エラーログは次のとおりです。解決策を教えてください。また、可能であれば、この背後にある理由が必要です。フラグを使用すると、プロセスは各反復の開始時にのみ停止をチェックします。プロセスを著しく停止したい。
コード
Button b;
ProgressDialog pd = null;
MyThread mt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button) findViewById(R.id.btn_start);
b.setOnClickListener(this);
}
public void onClick(View v) {
pd = ProgressDialog.show(this, "one", "two", true, true);
mt = new MyThread();
mt.start();
}
class MyThread extends Thread {
@Override
public void run() {
// assume this loop is my process.
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.v("log_tag", "" + i);
}
Log.v("log_tag", "process COmplited");
pd.dismiss();
super.run();
}
}
@Override
protected void onDestroy() {
Log.v("log_tag", "OnDestroy");
pd.dismiss();
mt.stop();
super.onDestroy();
}
ログ猫のエラー。
11-09 17:26:45.313: E/global(594): Deprecated Thread methods are not supported.
11-09 17:26:45.313: E/global(594): java.lang.UnsupportedOperationException
11-09 17:26:45.313: E/global(594): at java.lang.VMThread.stop(VMThread.java:85)
11-09 17:26:45.313: E/global(594): at java.lang.Thread.stop(Thread.java:1379)
11-09 17:26:45.313: E/global(594): at java.lang.Thread.stop(Thread.java:1344)
11-09 17:26:45.313: E/global(594): at com.example.threaddemo.MainActivity.onDestroy(MainActivity.java:53)
11-09 17:26:45.313: E/global(594): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3642)
11-09 17:26:45.313: E/global(594): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3673)
11-09 17:26:45.313: E/global(594): at android.app.ActivityThread.access$2900(ActivityThread.java:125)
11-09 17:26:45.313: E/global(594): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
11-09 17:26:45.313: E/global(594): at android.os.Handler.dispatchMessage(Handler.java:99)
11-09 17:26:45.313: E/global(594): at android.os.Looper.loop(Looper.java:123)
11-09 17:26:45.313: E/global(594): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-09 17:26:45.313: E/global(594): at java.lang.reflect.Method.invokeNative(Native Method)
11-09 17:26:45.313: E/global(594): at java.lang.reflect.Method.invoke(Method.java:521)
11-09 17:26:45.313: E/global(594): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-09 17:26:45.313: E/global(594): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-09 17:26:45.313: E/global(594): at dalvik.system.NativeStart.main(Native Method)