我创建了一个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();
}
答案 0 :(得分:2)
如果通过“窗口列表”表示当您长按主页按钮时弹出的淡化对话框,则表示完全没问题。该窗口不一定显示当前正在运行的应用程序,而是显示最近使用的应用程序。
在您的对话框中,您可以在完成后简单地调用finish()
,然后您想让它消失。这主要是你所能做的一切..
Android将自行管理活动的“垃圾收集”。重要的是您在activity lifecycle内正确分配和释放资源,例如在onResume(...)
事件中注册耗电量大的服务,并在onPause(...)
事件中再次注销它们。