如何从Handler启动服务

时间:2013-07-12 08:32:51

标签: android android-service

我有一个关于启动服务的基本问题。

我有一个服务,它启动一个用于解析文件的线程;完成后,通过发送消息来传达回传。

现在,在服务的处理程序中收到此消息后,我想启动另一个服务。

由于Handler没有Context,我该如何启动另一个服务?

一种选择是发送本地广播并接收相同并启动服务,但还有其他方法吗?

3 个答案:

答案 0 :(得分:0)

这将是这样的

public int onStartCommand(Intent intent, int flags, int startId)
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.mainActivity);

    Message msg = new Message();
    msg.what = 0;
    mHandler.sendMessage(msg);
}


Handler mHandler = new Handler()
{
 public void handleMessage(android.os.Message msg) {

    if(msg.what==0) 
{
       StartService(new Intent(Myservice.this,    secondservice.class));
            finish();
 }          

    };
};

答案 1 :(得分:0)

只需创建一个需要上下文的自定义处理程序:

public class CustomHandler extends Handler {
    Context mContext;

    public CustomHandler(Context context) {
        mContext = context;
    }

    public void handleMessage(Message msg) {
        if(msg.what == ID_STARTSERVICE) {
             Intent i = new Intent...
             mContext.startService(i);
        }
    }
}

但请确保传递ApplicationContext(new CustomHandler(getApplicationContext()))而不是Activity上下文。

答案 2 :(得分:0)

您可以从Handler启动服务,而无需以这种方式引用Context:

Intent serviceIntent = new Intent();
serviceIntent.setAction("your.package.UpdaterServieName");
startService(serviceIntent);

我希望我理解你的问题,这个回复对你有用。

抱歉我的英文。