【问题标题】:Activity Still Runs - Android活动仍在运行 - Android
【发布时间】:2011-02-11 06:38:15
【问题描述】:

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

有什么想法可能是错的吗?

我的代码如下所示,在 OK/Cancel 按钮后调用完成 protected 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();
}

【问题讨论】:

  • 窗口列表按钮是什么意思?警报对话框中的确定/取消按钮如何操作活动?
  • 您不应在启动时启动活动。这令人沮丧并显着减慢了启动过程。
  • @Gopinath:窗口列表意味着我们可以看到以前打开的活动列表的位置可能是 HOME 按钮旁边的按钮。添加了代码sn-p。

标签: android android-activity android-alertdialog


【解决方案1】:

如果“窗口列表”是指长按主页按钮时弹出的褪色对话框,那很好。该窗口不一定显示当前运行的应用程序,而是显示最近使用的应用程序。

在您的对话框中,您只需在完成后调用finish() 并使其消失即可。这主要是你能做的..

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

【讨论】:

  • @Jury:在OK/CANCEL后调用finish(),添加代码sn-p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多