1
アンドロイドアプリケーションでスレッドを実行する際に問題が発生しました。ユーザーに何かを尋ねるダイアログが表示され、ユーザーが「はい」をクリックすると、バックグラウンドで何かをしている間に読み込みダイアログが表示されます。スレッドを作成しましたが、[はい]ボタンをクリックすると、プロセスが完了するまでUIはロックされます。Androidスレッドの問題
コード: ダイアログ:
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("LOGO.bin Was Not Found, Would You Like To Extract It?")
.setTitle("LOGO Not Found!");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
getAndExtract();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
System.exit(0);
}
});
AlertDialog dialog = builder.create();
dialog.show();
getAndExtract:
public void getAndExtract()
{
new Thread(new Runnable() {
@Override
public void run() {
try {
showLoad("Grabbing Logo...");
getLogo();
Thread.sleep(2000);
progressDialog.cancel();
showLoad("Extracting Images...");
extractImages();
Thread.sleep(2000);
progressDialog.cancel();
}catch (InterruptedException iE)
{
iE.printStackTrace();
}
}
}).run();
}
showLoad:extractImagesの
progressDialog.setMessage(msg);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
基礎:
Command cmd = new Command(0, "LogoInjector -i " + getFilesDir() + "/LOGO.bin -d -g " + getFilesDir() + "/");
RootTools.getShell(true).add(cmd);
getLogoのの
基礎:
Command cmd = new Command(0, "dd if=/dev/block/mmcblk0p" + partitionIndex + " of=" + getFilesDir() + "/LOGO.bin");
RootTools.getShell(true).add(cmd);
私もrunOnUiThreadでshowLoadを入れてみましたが、変化はなかった...私はprogressDialog.cancelを削除する場合は();読み込みダイアログが表示されますが、抽出が完了した後に表示されます。私は「はい」を押して、getLogo()とextractImages()の両方が完了するまでハングします。
これはなぜ動作しないのかを知る人はいますか?
ありがとうございます!
あなたはAsyncTaskを(使用してみましたか)? – ErickBergmann