【问题标题】:Relaunching activities in Android在 Android 中重新启动活动
【发布时间】:2011-07-13 20:22:10
【问题描述】:

我是一名 Android 开发新手,在阅读了有关任务和活动的文档后,我无法让我的应用程序正常工作。

(首先,对不起我的英语)

我的应用程序包含两个活动:LOGINNEWS。两个activity的启动方式都是singleTask。

NEWS 活动使用 onCreate 创建一个通知,其标准通知代码为Android notification tutorial!。

int icon = R.drawable.notification_icon;        // icon from resources
CharSequence tickerText = "Hello";              // ticker-text
long when = System.currentTimeMillis();         // notification time
Context context = getApplicationContext();      // application Context
CharSequence contentTitle = "My notification";  // expanded message title
CharSequence contentText = "Hello World!";      // expanded message text

Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

当我第一次打开应用程序时:

登录 --> onResume() --> 新闻 --> onCreate() --> 通知

有代码

Intent newLogAct = new Intent(Login.this, News.class);
TomTuckerActivity.this.startActivity(newLogAct);

如果我点击 Back *NEWS* 会再次被破坏:

登录 --> onResume() --> 新闻 --> onCreate() --> 通知

(我不喜欢那个循环,使用它的原因在最后解释)

如果我点击 Home,我会返回主菜单,然后从这里开始我不明白的内容:

如果我使用通知重新启动应用程序没有问题,并且 NEWS 窗口会再次打开而不调用 onCreate 并且不发送通知。

如果我在调用 NEWS 时使用应用程序图标,则 singleTask 选项似乎没用,因为再次调用 onCreate() 并再次发送通知。

我想要的是使用通知或图标恢复我离开的应用程序。

newLogAct 中的标志可以解决问题吗?

在这两个活动中都有 singleTask 启动选项可以吗?


关于返回按钮循环问题:

为了避免循环,我考虑使用 onCreate() 而不是 onResume()。但是,当我重新启动应用程序时,应用程序图标 LOGIN 已加载,但未调用 onCreate,因此未加载 NEWS

还有其他方法可以解决吗?

也许使用 onNewIntent() 方法?

【问题讨论】:

  • 首先,为什么launch方法是singleTask? doc 说它应该只在非常特殊的情况下使用。
  • 因为如果不是,当我点击主页然后重新进入带有图标或通知的应用程序时,会创建一个新实例,然后我有:登录 - 新闻 - 登录 - 新闻 - ... 四个活动而不是只有两个。还有其他方法吗?
  • 如果你重新进入带有图标的应用程序,我认为它不会创建一个新实例,它应该只是回到上一个活动。

标签: android android-activity launching


【解决方案1】:

您的问题(或至少部分问题)似乎是:如何在您离开应用程序的地方返回通知。

不应该以这种方式使用通知,单击通知应该启动一个新的活动,其目的是处理通知。

如果您确实想回到您离开它的应用程序(我正在这样做),您可以使用以下技巧(我不知道这是否是一个好习惯,但它有效并且似乎没有那hackish):创建一个名为Autodestruct 的活动,它在其onCreate() 方法中调用finish(),并使通知运行此活动。这将在其顶部恢复具有虚拟 Activity 的后堆栈并立即删除虚拟 Activity。

【讨论】:

  • 感谢您的回答。但是,从通知访问时我没有任何问题,应用程序从我离开的地方恢复。我按照您的建议更改了 singleTop 的 singleTask 方法,它仍然有效。当我使用该图标启动应用程序时,它会创建一个全新的实例。但是,如果我首先使用通知启动它,然后我按下主页按钮,然后我使用应用程序在我离开它的地方恢复的图标。有点奇怪。
  • 我没有建议,您甚至不必更改启动方法,standard 应该可以。
最近更新 更多