Java AsyncTask在操作期间不显示对话框
我的AsyncTask的progressDialog未显示。它似乎正确,但不显示对话框。。内部的操作工作正常,但似乎忽略了Java AsyncTask在操作期间不显示对话框,java,android,android-asynctask,progressdialog,Java,Android,Android Asynctask,Progressdialog,我的AsyncTask的progressDialog未显示。它似乎正确,但不显示对话框。。内部的操作工作正常,但似乎忽略了onPreExecute()和onPostExecute()方法 private class copyApk extends AsyncTask<Void, Void, Void> { int appPosition; ProgressDialog mProgressDialog = new ProgressDialog(getActivity(
onPreExecute()
和onPostExecute()
方法
private class copyApk extends AsyncTask<Void, Void, Void> {
int appPosition;
ProgressDialog mProgressDialog = new ProgressDialog(getActivity());
@Override
protected void onPreExecute(Void pre) {
super.onPreExecute();
mProgressDialog.setTitle("Copy apk");
mProgressDialog.setMessage("Copying...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... apks) {
final File customfolder = new File(Environment.getExternalStorageDirectory().toString()+File.separator+"HazyApkBackup");
if(!customfolder.exists()){
customfolder.mkdirs();
}
try
{
vacca = getActivity().getPackageManager().getApplicationInfo(app.getPackageName(), packageManager.GET_META_DATA).sourceDir.toString();
//Toast.makeText(getActivity(), "Boh "+vacca, Toast.LENGTH_SHORT).show();
process = Runtime.getRuntime().exec("cp " + vacca + " " + customfolder);
//Toast.makeText(getActivity(), "Apk copied in "+customfolder, Toast.LENGTH_SHORT).show();
}
catch (PackageManager.NameNotFoundException | IOException e)
{
Toast.makeText(getActivity(), "Sorry, the apk was not copied correctly", Toast.LENGTH_SHORT).show();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if(mProgressDialog.isShowing())
Toast.makeText(getActivity(), "Apk copied in "+customfolder, Toast.LENGTH_SHORT).show();
mProgressDialog.dismiss();
}
}
私有类copyApk扩展异步任务{
int-appPosition;
ProgressDialog mProgressDialog=新建ProgressDialog(getActivity());
@凌驾
受保护的void onprexecute(void pre){
super.onPreExecute();
设置标题(“复制apk”);
设置消息(“复制…”);
mProgressDialog.setUndeterminate(false);
mProgressDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…apks){
final File customfolder=新文件(Environment.getExternalStorageDirectory().toString()+File.separator+“HazyApkBackup”);
如果(!customfolder.exists()){
customfolder.mkdirs();
}
尝试
{
vacca=getActivity().getPackageManager().getApplicationInfo(app.getPackageName(),packageManager.GET_META_DATA).sourceDir.toString();
//Toast.makeText(getActivity(),“Boh”+vacca,Toast.LENGTH\u SHORT.show();
process=Runtime.getRuntime().exec(“cp”+vacca+“”+customfolder);
//Toast.makeText(getActivity(),“Apk复制到”+customfolder,Toast.LENGTH_SHORT.show();
}
catch(PackageManager.NameNotFoundException | IOException e)
{
Toast.makeText(getActivity(),“对不起,apk复制不正确”,Toast.LENGTH\u SHORT.show();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
if(mProgressDialog.isShowing())
Toast.makeText(getActivity(),“Apk复制到”+customfolder,Toast.LENGTH_SHORT.show();
mProgressDialog.disclose();
}
}
感谢您的onPreExecute()
方法没有被调用,因为它的签名不正确。正确的方法没有参数
@Override
protected void onPreExecute()
{
...
onPreExecute()
的原型:
在UI线程上调用onPreExecute()
和onPostExecute()
方法。最好使用WeakReference
,以避免将来出现异常
在AsyncTask
中,创建一个WeakReference
如下:
private WeakReference<MyActivity> myWeakContext;
您是如何启动asynctask的?以这种方式:new copyApk().execute();删除
Void pre
参数。
private WeakReference<MyActivity> myWeakContext;
MyActivity activity = this.myWeakContext.get();
ProgressDialog mProgressDialog = new ProgressDialog(activity);