【问题标题】:start a service in onCreate of Application在 Application 的 onCreate 中启动一个服务
【发布时间】:2011-12-08 21:30:24
【问题描述】:

我正在尝试在我的应用程序启动时启动服务,并且我需要它重新启动服务,以防用户决定强制关闭服务,即使应用程序正在运行(没关系,让他强制关闭应用程序,但我需要防止在应用程序运行时关闭服务)。

所以我开始扩展 Application 类,这就是我正在做的启动服务...

ServiceConnection conn = new ServiceConnection() {
        public void onServiceConnected(ComponentName className, IBinder service) {
            Log.d("start","ok");
        }

        public void onServiceDisconnected(ComponentName className) {
        }
    };
    bindService(new Intent(this,DueService.class), conn, 0);

但是,这不会启动服务。虽然,使用 startService 似乎工作。有什么想法吗?

【问题讨论】:

    标签: android service android-service


    【解决方案1】:

    Application 使用bindService() 毫无意义,因为您将永远无法调用unbindService()

    当然,最好的办法是让您的服务仅在主动向用户提供价值时才在内存中,而不是仅仅因为您的应用程序的某些其他组件恰好被加载。就目前而言,如果您按照使用Application 中的startService() 的计划进行,那么您正朝着泄漏此服务的方向前进。 Android 中没有将“应用程序正在运行”作为生命周期构造的真正概念,因此您将没有合乎逻辑的时间来停止服务。

    (顺便说一句,虽然Application 有一个onTerminate() 方法,但它永远不会被调用)

    【讨论】:

    • 那么您如何建议,我可以继续从服务器获取实时数据,如果我无法获取数据,那么应用程序将无法正常运行。所以我现在有两个选择,要么让应用崩溃,要么重启服务。
    • 如果您使用没有绑定服务的服务会出现什么问题,即 startService(intent); ?
    • @Amit:从您的每个活动中调用 bindService()unbindService()。或者,从您的入口点活动(或者,可能是Application)调用startService() 并跟踪您的活动何时来去,以便您可以在不再需要时使用stopService() 关闭该服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多