Android启动服务onStart和另一个问题

时间:2011-08-20 04:36:39

标签: android android-service

我一直试图弄清楚这一段时间,但无法弄清楚为什么会这样。这看起来很简单,但我无法解决这个问题。

以下是我想要发生的事情

当我启动申请时,
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);
        }
    }
}

2 个答案:

答案 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
    }
}