2

我的前同事开发了一项在后台播放音乐的服务。但是,如果用户想退出程序,那么应用程序会调用下面的代码来停止服务。服务停止,但我无法在覆盖 onDestroy 方法时处理它

    Activity realAct = context.getParent();
    if (realAct == null) {
        realAct = context;
    }
    ContextWrapper cw = new ContextWrapper(realAct);

    cw.stopService(new Intent(cw, MyPlayerService.class));

编辑:简而言之,Activity Main 启动 Activity Sub,然后 Activity Sub 启动 Service。然后我按下返回按钮,这样 Activity Sub 就完成了。当我在 Activity Main 中时,我调用上面的 stopservice 代码。所以不调用Service的onDestroy方法

4

2 回答 2

0

再次尝试在您的服务代码中使用类似的方法:

@Override
public void onDestroy()
{
super.onDestroy();
//your code
}

它必须工作!

于 2013-07-29T06:48:20.320 回答
0

当用户退出应用程序时,您是否尝试停止服务?

当系统由于资源不足需要终止活动时调用 onDestroy。仅仅因为您按下您的应用程序并不意味着 onDestroy 会立即被调用。

但是如果你想强制关闭你的应用程序让它自动调用 onDestroy,调用

结束()

在您退出应用程序的任何位置。

如果您想在用户按下后退按钮退出时调用 onDestroy,请覆盖 onBackPressed() 并从那里调用 finish()。

但实际上,这是一种反模式,所以我建议使用 onPause() 代替。

在 OP 编辑​​时编辑:

我认为我们需要更多关于如何实例化服务的详细信息,但这里有一些额外的想法:

您是否正确覆盖了 onDestroy 并调用了 super 方法?

如果是这种情况,我能想到的唯一另一种可能性是您仍然将 ServiceConnection 对象绑定到设置了 BIND_AUTO_CREATE 的服务。在删除所有这些绑定之前,服务不会被破坏。

因此,请确保两者都做:

unbindService(conn);
stopService(intent);
于 2013-07-29T07:01:25.007 回答