gpt4 book ai didi

安卓线程问题

转载 作者:行者123 更新时间:2023-11-29 19:33:48 26 4
gpt4 key购买 nike

我在我的 android 应用程序中运行一个线程时遇到了一些问题,它应该显示一个对话框询问用户一些事情,如果用户单击是,一个加载对话框应该出现在它在后台执行某些操作时,我创建了一个线程但是当我单击"is"按钮时,UI 仍然锁定,直到该过程完成。

代码:对话框:

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();

获取和提取:

 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();




}

显示负载:

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);

我也尝试将 showLoad 放在 runOnUiThread 中,但没有任何变化......如果我删除 progressDialog.cancel();它确实显示了加载对话框,但是在提取完成之后。我按是,它只是挂起,直到 getLogo() 和 extractImages() 都完成

谁能帮我找出为什么这不起作用?

谢谢!

最佳答案

尝试使用 AsyncTask:

    final AsyncTask<Void,Void,Void> asyncTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {

// do whatever you need to do in background

return null;
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute( aVoid);

// do after finished
}
};
asyncTask.execute();

希望对您有所帮助 =]

关于安卓线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39515453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com