Как запустить службу из обработчика

У меня есть основной вопрос о запуске службы.

У меня есть служба, которая запускает поток для разбора файла; как только это будет сделано, то же самое будет передано обратно путем отправки сообщения.

Теперь, получив это сообщение в обработчике службы, я хочу запустить другую службу.

Поскольку у обработчика нет контекста, как мне запустить другую службу?

Один из вариантов — отправить локальную широковещательную рассылку, получить ее и запустить Сервис, но есть ли другой способ сделать это?


person Manju    schedule 12.07.2013    source источник


Ответы (3)


Просто создайте собственный обработчик, которому нужен Context :

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.

person NitroG42    schedule 12.07.2013

Это будет что-то вроде этого

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();
 }          

    };
};
person Shakeeb Ayaz    schedule 12.07.2013

Вы можете запустить службу из обработчика без использования ссылки на контекст следующим образом:

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

Надеюсь, я понял ваш вопрос, и этот ответ может быть вам полезен.

Извините за мой английский.

person Flavio Capaccio    schedule 12.07.2013