Android线程问题
我在android应用程序中运行线程时遇到一些问题,它应该会显示一个对话框询问用户一些问题,如果用户单击“是”,则在后台执行操作时会出现一个加载对话框。我创建了一个线程,但当我单击“是”按钮时,UI仍然会锁定,直到进程完成 代码: 对话框: 获取和提取:Android线程问题,android,Android,我在android应用程序中运行线程时遇到一些问题,它应该会显示一个对话框询问用户一些问题,如果用户单击“是”,则在后台执行操作时会出现一个加载对话框。我创建了一个线程,但当我单击“是”按钮时,UI仍然会锁定,直到进程完成 代码: 对话框: 获取和提取: public void getAndExtract() { new Thread(new Runnable() { @Override public void run() {
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();它确实显示加载对话框,但在提取已经完成之后。我按下Yes,它会一直挂起,直到getLogo()和extractImages()都完成
有人能帮我找出为什么这不起作用吗
谢谢 尝试使用异步任务:
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();
final AsyncTask AsyncTask=new AsyncTask(){
@凌驾
受保护的Void doInBackground(Void…参数){
//在后台做任何你需要做的事情
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
//完成后做什么
}
};
asyncTask.execute();
希望对您有所帮助=]您是否尝试使用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();