0

我有一个名为 Download 的类,它扩展了 AsyncTask。OnPreExecute 方法执行以下操作:

    @Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    super.onPreExecute();   
    this.dialog.setTitle("Check updates...");

    this.dialog.show();

}

列出的对话框在类的构造函数中实例化,并具有以下特征:

 dialog = new ProgressDialog(activity);
 dialog.setCancelable(false);

在 doInBackground 方法中,我将执行大量网络操作,并且每次能够从所需的 url 下载图像时,我都会调用 progress update 方法:

 protected void onProgressUpdate(String... values) 
 // TODO Auto-generated method stub
  super.onProgressUpdate(values);



    //call the onprogress update
    publishProgress("1000");

    //do a lot of stuff with the network


 }

在 onprogressupdate 中,我将关闭创建的第一个对话框,然后显示另一个:

        protected void onProgressUpdate(String... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);

        if(values[0].equals("1000")){

            dialog.dismiss();

                  progress_brand.show();

            progress_brand.setProgress(progress_brand.getProgress()+1);

            if(progress_brand.getProgress() == progress_brand.getMax()){

                progress_brand.dismiss();

            }

        } 
 }

所以基本上:在异步任务开始时,我会显示一个标题为“检查更新”的对话框......然后我将在 doinbackground 方法中搜索这些更新,如果我能找到一些,我将使用发布进度以关闭“旧对话框”并使用 ProgressDialog.STYLE_HORIZONTAL 创建一个新对话框。每次我从网上下载一些东西时,最后一个对话框都会更新。

所以这就是问题所在。如果我使用 eclipse 运行应用程序,然后在下载期间暂停应用程序,一切正常。如果我第二次重新进入应用程序,我可以看到下载继续完美,我可以看到第二个进度条继续按预期自我更新。

但是,如果我制作了一个签名的 apk --> 通过该 apk 安装应用程序 --> 启动应用程序 --> 在下载过程中暂停 --> 重新输入应用程序,然后再次显示第一个对话框并且下载无法正常进行。我从 logcat 中看到,如果我从 eclipse 运行应用程序,onpreexecute 方法只会调用一次,即使我会退出并重新进入应用程序。但是,如果我将通过 apk 安装应用程序,则每次我退出然后重新启动应用程序时都会调用 onpreexecute 方法。

为什么会这样?我已经尝试清理项目和其他基本操作,以查看问题是否是该 apk 的创建,但没有结果。

4

1 回答 1

0

不,您不要在 AnyTask 中使用 ProgressDialog

试试这个(例如)

public class Updated extends Activity {
    /**
     * ProgressDialog which is shown
     */
    private ProgressDialog progessDialog_g;
    private boolean downloadUses = false;


    /**
     * Instance of the BroadcastReceiver
     */
    private BroadcastReceiver receiver_g;
    private IntentFilter iFilter;
    protected ServiceConnection mServerConn = new ServiceConnection() {
        public void onServiceConnected(ComponentName name, IBinder binder) {

        }

        public void onServiceDisconnected(ComponentName name) {

        }

    };
    private Intent sI;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.progress);

        progessDialog_g = new ProgressDialog(this);

        // Reads and sets the settings for the ProgressDialog

        // Create the IntentFilter for the different broadcast messages
        iFilter = new IntentFilter(
                ProgressService.PROGRESS_DIALOG_BROADCAST_FINISH);
        // Creates the BroadcastReceiver
        receiver_g = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                if (ProgressService.PROGRESS_DIALOG_BROADCAST_FINISH
                        .equals(intent.getAction())) {
                    // Finishs the ProgressDialog
                    progessDialog_g.cancel();
                    Finish();

                }
            }
        };




    }



    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    protected void onResume() {

        sI = new Intent(this, ProgressService.class);
        this.bindService(sI, mServerConn, Context.BIND_AUTO_CREATE);
        this.startService(sI);
        // Registers the BroadcastReceiver
        registerReceiver(receiver_g, iFilter);
        if (downloadUses) {
            downloadUses = false;
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        } else {

            progessDialog_g.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progessDialog_g.setMessage("you messege");
            progessDialog_g.show();

            new DownloadJSONTask(this, sI)
                    .execute(Initialize.server_url+"/changes/update/1");

        }

        super.onResume();
    }

    @Override
    protected void onPause() {
        this.stopService(new Intent(this, ProgressService.class));
        this.unbindService(mServerConn);
        unregisterReceiver(receiver_g);
        super.onPause();
    }

    private void Finish() {

        Intent in = new Intent(this, RegionsActivity.class);
        startActivity(in);
        downloadUses = true;
    }

}

}

public class ProgressService extends IntentService {

    public static final String PROGRESS_DIALOG_BROADCAST_FINISH = "Dialog.Progress.MyKey.Finish";

    public ProgressService() {
        super("ExampleProgressService");
    }

    /**
     * Send the finish message.
     */
    private void closeProgressActivity() {
        Intent intent = new Intent(PROGRESS_DIALOG_BROADCAST_FINISH);

        sendBroadcast(intent);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // extractVariablesFromIntentAndPrepare(intent);

        String action = intent.getStringExtra("Action");

        if ("0".equals(action)) {

            closeProgressActivity();

        }

    }

}

在你里面 AnyTask

sI.putExtra("Action", "0");
        context.startService(sI);

在你身上体现

  <service android:name=".Intent.ProgressService" />
于 2012-12-17T13:34:40.717 回答