Java AsyncTask在操作期间不显示对话框

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(

我的AsyncTask的progressDialog未显示。它似乎正确,但不显示对话框。。内部的操作工作正常,但似乎忽略了
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);