Android 从通知开始活动时处理反压
我有一个通知,里面有两个按钮。因此,当用户单击此通知(不是单击通知中的按钮,而是直接单击通知)时,它将启动主屏幕 在我的主屏幕中,我显示了一个对话框,该对话框提供了与通知中所示相同的选项 当用户与对话交互,然后稍后单击主屏幕中的某个按钮时,它将启动一个新的活动 当用户按下启动的新活动的后退按钮时。它会回到主屏幕 现在我面临的问题是,当它返回到主活动(活动1)时,它再次显示该对话,因为它使用的是从通知启动主屏幕的相同意图 我不希望该对话再次显示,因为用户已经与该对话进行了交互。我该怎么处理 这就是我的onStart的外观Android 从通知开始活动时处理反压,android,android-intent,notifications,onbackpressed,Android,Android Intent,Notifications,Onbackpressed,我有一个通知,里面有两个按钮。因此,当用户单击此通知(不是单击通知中的按钮,而是直接单击通知)时,它将启动主屏幕 在我的主屏幕中,我显示了一个对话框,该对话框提供了与通知中所示相同的选项 当用户与对话交互,然后稍后单击主屏幕中的某个按钮时,它将启动一个新的活动 当用户按下启动的新活动的后退按钮时。它会回到主屏幕 现在我面临的问题是,当它返回到主活动(活动1)时,它再次显示该对话,因为它使用的是从通知启动主屏幕的相同意图 我不希望该对话再次显示,因为用户已经与该对话进行了交互。我该怎么处理 这就是
@Override
protected void onStart() {
super.onStart();
String action = getIntent.getAction();
Log.d("MainScreen", "onStart: action " + action);
if(action.equals(NOTIFICATION_CLICK)){
showDialogue();
}
}
您在主屏幕中显示了哪个方法(onCreate、onStart或onResume) 我猜你在简历上展示了对话。因为当用户转到其他活动时,会调用桌面上的活动。否则,按用户单击后退按钮,将调用onstart和onResume 我的建议是: 解决方案1:
@Override
protected void onCreate(Bundle savedInstanceState) {
if (savedInstanceState == null && isFromNotification()) {
showDialog()
}
}
解决方案2:
private boolean isShow;
protected void onStart() {
super.onStart();
if (isShow || !isFromNotification()) return;
Toast.makeText(this, "I love you", Toast.LENGTH_LONG).show();
isShow = true;
}
但我更喜欢解决方案1,它更安全,因为如果android没有足够的内存,隐藏的活动可以被删除 您在主屏幕中显示了哪个方法(onCreate、onStart或onResume) 我猜你在简历上展示了对话。因为当用户转到其他活动时,会调用桌面上的活动。否则,按用户单击后退按钮,将调用onstart和onResume 我的建议是: 解决方案1:
@Override
protected void onCreate(Bundle savedInstanceState) {
if (savedInstanceState == null && isFromNotification()) {
showDialog()
}
}
解决方案2:
private boolean isShow;
protected void onStart() {
super.onStart();
if (isShow || !isFromNotification()) return;
Toast.makeText(this, "I love you", Toast.LENGTH_LONG).show();
isShow = true;
}
但我更喜欢解决方案1,它更安全,因为如果android没有足够的内存,隐藏的活动可以被删除 在SharedReferences中保存值在该框架中没有其他方法吗?如果您想将其保存在本地缓存中,请使用静态变量(true,false),但这是一种不好的做法。您必须使用SharedReference在主屏幕中显示了哪种方法的对话框(onCreate、onStart或onResume)?我猜你在简历上展示了对话。因为当我们点击后退按钮时,onCreate将不会被调用。您是否尝试将显示对话框的方法放在onCreate方法中?@LuongDinh我在调用onResume时,尝试将其移动到onStart。但是,当按back时仍显示对话在SharedReferences中保存值没有其他方法通过框架吗?如果您想将其保存在本地缓存中,则根本不需要使用静态变量(true,false),但这是一种不好的做法。您必须使用SharedReference在主屏幕中显示了哪种方法的对话框(onCreate、onStart或onResume)?我猜你在简历上展示了对话。因为当我们点击后退按钮时,onCreate将不会被调用。您是否尝试将显示对话框的方法放在onCreate方法中?@LuongDinh我在调用onResume时,尝试将其移动到onStart。但是,按下back时仍显示对话