活动仍然运行 - Android

时间:2011-02-11 06:38:16

标签: android android-activity alertdialog

我创建了一个BootReceiver,它创建一个新活动并弹出一个Alert Dialog。 按OK /取消后,该活动仍未完全关闭。我可以在“窗口列表”按钮&中看到相同的内容。我可以从“窗口”列表中看到“警报”对话框。

任何想法可能出错?

我的代码如下所示,在确定/取消后调用完成但是受保护的void onCreate(Bundle savedInstanceState){         super.onCreate(savedInstanceState);

    WindowManager.LayoutParams winParams;

    getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    // Windows Attributes   
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    winParams = getWindow().getAttributes();
    winParams.flags |= (WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

    getWindow().setAttributes(winParams);

     // Show Popup
    popup = new AlertDialog.Builder(this)
    .setCancelable(true)
    .setPositiveButton("agree", new OnClickListener() { 
        public void onClick(DialogInterface dialog, int arg1) {

                if( DEBUG ) Log.d(LOG_TAG, " AGREE CLICKED"  );

        finish();}})

    .setNegativeButton("disagree", new OnClickListener() { 
        public void onClick(DialogInterface dialog, int arg1) {

                if( DEBUG ) Log.d(LOG_TAG, " DISAGREE CLICKED"  );
    finish();}})

    .setOnCancelListener(
        new DialogInterface.OnCancelListener() {
            public void onCancel(DialogInterface dialog) {
                finish();
    }});

    popup.setIcon(android.R.drawable.ic_dialog_alert);
    popup.setTitle("title");
    popup.setMessage("Message");

    dialog = popup.create();

    winParams =  dialog.getWindow().getAttributes();
    winParams.flags |= (WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    dialog.getWindow().setAttributes(winParams);

    dialog.setOnDismissListener(AlwaysReqWhenPS);
    dialog.setOnKeyListener(this);             
    dialog.show();

}


protected void onStop() {
    if( DEBUG ) Log.d(LOG_TAG, " OnStop Called"  );
    super.onStop();
}

public void onDestroy() {
    if( DEBUG ) Log.d(LOG_TAG, " onDestroy Called"  );
    super.onDestroy();
}

public void onPause() {
    if( DEBUG ) Log.d(LOG_TAG, " onPause Called"  );
    super.onPause();
}

1 个答案:

答案 0 :(得分:2)

如果通过“窗口列表”表示当您长按主页按钮时弹出的淡化对话框,则表示完全没问题。该窗口不一定显示当前正在运行的应用程序,而是显示最近使用的应用程序。

在您的对话框中,您可以在完成后简单地调用finish(),然后您想让它消失。这主要是你所能做的一切..

Android将自行管理活动的“垃圾收集”。重要的是您在activity lifecycle内正确分配和释放资源,例如在onResume(...)事件中注册耗电量大的服务,并在onPause(...)事件中再次注销它们。