2

私は Android アノテーションを使用しています。進行状況ダイアログがありますが、画面を回転させているとき (ランドからポート) です。進行状況ダイアログが閉じ、これらのエラーが log cat に表示されます。

アクティビティ com.example.progressdialog.AnnotationProgressDialogActivity_ は、最初にここに追加されたウィンドウ com.android.internal.policy.impl.PhoneWindow$DecorView@40661c20 を漏らしました

android.view.WindowLeaked: アクティビティ com.example.progressdialog.AnnotationProgressDialogActivity_ は、最初にここに追加されたウィンドウ com.android.internal.policy.impl.PhoneWindow$DecorView@40661c20 をリークしました

ここに私のコードがあります:-

@EActivity(R.layout.main)
public class AnnotationProgressDialogActivity extends Activity 
{
    @NonConfigurationInstance
    ProgressDialog pd ;
        
    @NonConfigurationInstance
    @Bean 
    BackgroundTask bgt;
     
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

    }
     
    @Click
    public void loginButton()
    {
        
        pd = ProgressDialog.show(this,"Login", "Loading please wait.....");
        bgt.backGroundMethod();
    }
    
    public void dismissDialog()
    {
        pd.dismiss();
    }
}

    enter code here

@EBean
public class BackgroundTask 
{
    @RootContext
    Activity apda;
    
    @Background
    public void backGroundMethod()
    {
        try
        {
            TimeUnit.SECONDS.sleep(10);
            update();
        }
        catch(Exception e)
        {
            Log.e("Error",""+e);
        }
}

    @UiThread
    public void update()
    {
        //((AnnotationProgressDialogActivity)apda).updateUI();
        ((AnnotationProgressDialogActivity)apda).dismissDialog();
    }
}

   
4

1 に答える 1

1

このエラーは、リークされた DecorView への参照を持つ破棄されたアクティビティへの参照を保持している ProgressDialog への参照を保持しているために発生します。

代わりに次のことを行う必要があります。

  1. ブール値フィールドなど、BackgroundTask を「実行中」としてマークする方法を用意する
  2. onCreate() で、"running" が true であることを確認し、yes の場合は、新しい進行状況ダイアログを作成して表示します

に置き換えることも@RootContext Activity apdaできます@RootContext AnnotationProgressDialogActivity apda

于 2012-11-28T09:29:19.070 に答える