簡體   English   中英

旋轉后用 ProgressBar 更新 ProgressDialog

[英]Update ProgressDialog with ProgressBar after rotation

我的應用程序在一個線程中處理一些圖像,同時它顯示一個帶有進度條的對話框。

progressDialog = new ProgressDialog(Activity.this);
progressDialog.setProgressStyle(size);
progressDialog.show();
Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        for(int i = 0; i < size; i++{
            //process images
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    progressDialog.setProgress(i);
                }
            });
        }

    }
});
thread.start();

現在,如果發生輪換,我會

@Override
protected void onDestroy() {
    if (progressDialog != null && progressDialog.isShowing()) {
        progressDialog.dismiss();
    }

    super.onDestroy();
}

onCreate我重新創建對話框。 但是線程不會更改此新對話框的進度條。

旋轉后,顯示此對話框的活動(或片段)將被丟棄並創建一個新的。

您在新 Activity 中重新創建對話框,但是您啟動的線程更新了舊對話框中的對話框(該線程引用舊對話框的事實也構成了內存泄漏)。

我建議您執行以下操作:

  1. 實現一些 ImageProcessor 類並將它的一個實例放在 Application 對象中。
  2. 使 ImageProcessor 類可觀察並通知偵聽器有關進度。
  3. 在 Activity 中獲取對此對象的引用並在 onStart() 中訂閱通知(並在 onStop() 中取消訂閱)。
  4. 當狀態更新通知到達時 - 更新進度指示

使用這種方法,您會將處理邏輯封裝在一個特殊的對象中,該對象在旋轉后仍然存在,並且不同的組件可以調用其方法並訂閱來自它的通知。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM