Android活动生命周期 - 通知服务

时间:2012-07-17 12:02:12

标签: android android-service android-lifecycle

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

问题:

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

  • 我目前正在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);
    

    }

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

  1. 假设您在Activity-A中,并且转移到Activity-B,则会调用Activty-A的生命周期回调 - 在这种情况下立即调用Activity-A.onPause()和Activity-A。如果Activity-A在那段时间内被销毁,onDestroy()可能

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

答案 1 :(得分:0)

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