2

我了解 Android 生命周期的概念以及所涉及的不同事件。我创建了一个通知服务,让用户知道何时轮到他/她。我只希望在用户不再查看应用程序中的一项活动时执行此操作。他/她会在使用该应用程序时知道是否轮到他/她。

问题:

  • 如果我在 Main.java 类上设置生命周期事件,当用户导航到不同的类时会发生什么?onPause 事件会触发吗?由于用户可能在单个会话期间离开 10 个或更多活动,系统如何知道要执行哪些 onPause 事件?

  • 我目前在 Main.java 类的 onStop 和 onRestart 事件期间启动服务并停止服务。这没有按预期工作。即使我在系统中也会出现通知,这导致系统由于同时调用外部 api 而锁定。(见下文)。

    public void onRestart() {
    super.onRestart();
    
    Intent i = new Intent(Main.this, NotifyService.class);
    Main.this.stopService(i);   
    

    }

    public void onStop() {
        super.onStop();
    
    Intent i = new Intent(Main.this, NotifyService.class);
    i.putExtra("UserId", userId);
    Main.this.startService(i);
    

    }

任何帮助表示赞赏。

4

2 回答 2

1
  1. 假设您在 Activity-A 中,并且您移动到 ​​Activity-B,然后将调用 Activty-A 的生命周期回调 - 在这种情况下 Activity-A.onPause() 立即,而 Activity-A.onDestroy()可能在如果 Activity-A 在那段时间内被破坏,则很短。

  2. 用于启动/停止服务的正确方法是 onResume()(而不是您使用的 onRestart())和 onPause()(而不是您使用的 onStop())

于 2012-07-17T14:37:13.453 回答
0

您可以设置一个计数器,在 Activity 的 onResume() 中增加它并在 onPause() 中减少它。如果您的计数器为 0,则表示用户不在您的活动中(正在使用其他应用程序)。如果不是 1,那么他/她正在使用您的应用程序。请注意,您的计数器应保持在活动之外,因为它可能会被移除。我继承了 Application 类并将我的全局范围的计数器保留在那里。

于 2012-07-17T12:21:04.063 回答