【问题标题】:Handling onNewIntent for FLAG_ACTIVITY_NEW_TASK处理 FLAG_ACTIVITY_NEW_TASK 的 onNewIntent
【发布时间】:2012-03-22 04:12:11
【问题描述】:

我的 Activity 在 singleTop 模式和 C2DM 接收器下运行。在某些通知上,我需要运行该活动并以这种方式进行:

Intent activity = new Intent(context, klass);
activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(activity);

当背景活动时(例如之前按下主页按钮),一切正常。 但是当我刚刚按下电源按钮关闭屏幕时,无法通知正在运行的活动有关某些更改(onNewIntent 从未调用过)。

如何通知正在运行的活动?

【问题讨论】:

  • 我建议不要只在 onCreate 中更新你的 UI,但也要使用 onResume。尽管如此,我觉得这个问题太模糊了,我不确定我们是否得到了我们需要回答的所有问题。给出一些活动代码,主要方法。
  • 手机被锁定,activity好像在前台没有重启,onResume,onCreateonNewIntent没有被调用
  • 您可能会考虑使用一项服务,可能需要使用一些网络锁定来确保您仍能收到 c2dm 通知。
  • 通知工作正常,我已成功收到。我的问题是通知正在运行的活动有关一些更改。我尝试处理来自startActivity 调用的onNewIntent,但它不起作用
  • 有完全相同的问题。当单任务活动位于堆栈顶部时,并且在手机处于休眠状态时发送了一个新意图,直到屏幕唤醒才会调用 onNewIntent()。我的问题发布在这里stackoverflow.com/questions/9899751/…

标签: java android android-intent notifications


【解决方案1】:

斯凯瑞德, 我相信我有完全相同的情况。但是我注意到当手机处于睡眠状态并且新的意图被发送到活动时,它不会在屏幕打开之前启动活动(出于我的目的,我希望屏幕打开)。

我的解决方案是在我的 C2DM 接收器中获取唤醒锁。

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP,     TAG);
mWakeLock.acquire();

当然,请务必在 Activity 中使用 mWakeLock.release() 释放锁。

这是一种奇怪的行为,它似乎与其他 android 活动行为不一致。就我而言,我使用的是 singleTask 活动(我不确定您使用的是什么类型的活动,您没有说明)。如果堆栈顶部没有 Activity 实例,并且手机处于睡眠状态,我的 Activity 将启动,我可以在 onCreate() 中使用以下内容:

getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

但是,如果活动位于堆栈顶部并且手机处于睡眠状态,则活动不会启动,直到我打开屏幕。希望这对你有用。如果您不需要屏幕亮起,我会尝试使用唤醒锁的其他标志。

【讨论】:

    【解决方案2】:

    根据您的配置,这应该可以工作:

    • 将应用程序类构建为单例,以后您可以轻松访问它
    • 给它一个作为数据模型的数据成员,它可以从 C2DM 通知接收器和所有活动中访问
    • 根据 observable-Observer 设计模式构建数据模型
    • C2DM 通知将更改模型
    • activities ,在 onCreate 会插入一个事件监听器,在 onDestroy 时拔掉
    • 当模型发生变化时,它会向所有侦听器触发一个事件,而活动在收到事件时会更新其 UI

    这也是在您的应用中获得更好设计的好机会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2022-09-24
      相关资源
      最近更新 更多