您是否需要在Android中只向SystemService添加一次活动侦听器?或者也在resume()上?

您是否需要在Android中只向SystemService添加一次活动侦听器?或者也在resume()上?,android,android-activity,android-service,activity-lifecycle,searchmanager,Android,Android Activity,Android Service,Activity Lifecycle,Searchmanager,例如,在活动中侦听SearchDialog的关闭,您可以在onCreate中在此处注册侦听器: android.app.SearchManager searchManager = (android.app.SearchManager)getSystemService(Context.SEARCH_SERVICE); if (searchManager != null) { searchManager.setOnDismissListener(this);

例如,在活动中侦听SearchDialog的关闭,您可以在onCreate中在此处注册侦听器:

android.app.SearchManager searchManager =     (android.app.SearchManager)getSystemService(Context.SEARCH_SERVICE);
    if (searchManager != null)
    {
       searchManager.setOnDismissListener(this);
    }
我的问题是,这仍然是一个监听器,还是我需要在简历中再次将其设置为监听器?或者一个注册的总是注册的。我没有保留对SearchManager的本地参考

还有为什么我们要这么做,是否有任何理由去检查一个经理是否像这样是空的,或者是否可以安全地假设你永远不会得到一个空的经理回来

侦听器将在整个活动的生命周期中持续存在,因此您应该在onCreate中设置侦听器。在onResume中设置侦听器是多余和不必要的

Android文档声明,只有当本例中的服务名称Context.SEARCH\u服务不存在时,getSystemService才会返回null。因此,只要您确定它存在,它就不会返回null


如果你想要一个“健壮”的应用程序,不要假设你不能控制什么。使用空检查,但如果它实际上为空,请执行一些有用的操作。但是如果你非常草率,你可以说:如果SearchManager为空,那么整个应用程序都不工作,因此不管它是崩溃还是以干净的方式关闭都没有关系