我一直试图弄清楚这一段时间,但无法弄清楚为什么会这样。这看起来很简单,但我无法解决这个问题。
以下是我想要发生的事情
当我启动申请时,
1.如果后台服务(长时间运行的单件服务)未运行,请在启动活动之前启动它。
2.开始“主页”活动
更新了8/20
以下是发生的事情:
1.我启动应用程序,服务没有运行
2.我启动了意图(通过context.startService)
- context.startService被称为
3.活动结束
4. onStartCommand运行
如何在活动开始运行之前让onStartCommand运行?
对此提出的任何建议都可以减轻很多挫败感。我在询问之前搜索了论坛,但找不到与我的问题相符的任何内容
非常感谢!
的更新
感谢您的快速回复
我应该已经提到我已经从Application的扩展运行它(在onCreate方法中启动服务)。
在我当前的实现中(下面),这是在我逐步完成应用程序时按顺序发生的事情。我认为这会导致服务在活动之前运行但活动运行然后服务运行。这是我困惑的主要原因。
1.应用onCreate称为
2.运行startService方法
3.开始活动运行
4.服务onCreate称为
- 永远不会调用onStart服务(我会尝试使用onStartCommand,因为我没有针对旧平台 - 感谢Alexander的建议)
public class MyApp extends Application {
@Override
public final void onCreate()
{
if(!MyService.isRunning()) // this is a static method with thread lock
{
Intent i = new Intent(context, MyService.class);
i.setAction(MyConstants.INTENT_START_SERVICE);
context.startService(i);
}
}
}
答案 0 :(得分:2)
您可以创建一个扩展Application类的新类。此类将在调用主活动之前运行,并且仅在首次启动应用程序时运行。您可以在此处打开主页活动之前启动服务。
答案 1 :(得分:0)
感谢Alexander O的评论,它指出了我正确的方向来运行onStart命令。我仍然无法让onStartCommand在活动之前运行。有什么建议?
我的问题是我的服务中有onStartCommand和onStart函数。
显然我不理解onStartCommand的功能,并认为它只是应该定义服务类型(STICKY,NOT_STICKY)。
一旦我删除onStart并将onStart代码移动到onStartCommand,应用程序就开始工作了
对于那些想知道的人,这基本上就是我所拥有的。
public class MyService extends Service
{
...
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
// this was being executed but didn't really do anything
return Service.START_STICKY;
}
...
@Override
public void onStart(Intent intent, int startId)
{
// logic that was never executed
// problem fixed when I removed onStart and moved the code to onStartCommand
}
}