2017-02-06 8 views
0

Я делаю что-то вроде этого.Как подождать, когда служба Android будет работать, прежде чем продолжить остаток кода?

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

Моя проблема заключается в том, что служба не запускается, пока приложение не завершит выполнение. Как только выполнение закончено, я перезапускаю приложение, и служба запускается сейчас. Вот журналы, которые я нашел.

ActivityManager: Scheduling restart of crashed service com.example.myapp/.MyService in 1000ms 
ActivityManager: Force stopping service ServiceRecord{feb859c u0 com.example.myapp/.MyService} 
ActivityManager: Activity stop timeout for ActivityRecord{ffc2825 u0 com.example.myapp/.MyAppActivity t10} 
WindowState: WIN DEATH: Window{b5d67d6 u0 d0 p8877 com.example.myapp/com.example.myapp.MyAppActivity} 
SurfaceFlinger: id=102 Removed com.example.myapp/com.example.myapp.MyAppActivity (6/12) 
PowerManagerService: [api] handleWakeLockDeath : release WakeLock : PARTIAL_WAKE_LOCK 'MyApp' (uid=2000, pid=8877, ws=null) (elapsedTime=33507) 
SurfaceFlinger: id=102 Removed com.example.myapp/com.example.myapp.MyAppActivity (-2/12) 
ActivityManager: Force removing ActivityRecord{ffc2825 u0 com.example.myapp/.MyAppActivity t10}: app died, no saved state 
InputTransport: Input channel destroyed: name='b5d67d6 com.example.myapp/com.example.myapp.MyAppActivity (server)', fd=415 
SurfaceFlinger: id=102 Removed com.example.myapp/com.example.myapp.MyAppActivity (-2/12) 
MultiWindowPolicy: adjustStackFocus: r=ActivityRecord{18ffddd u0 com.example.myapp/.MyAppActivity t-1} multiWindowStyle=MultiWindowStyle{type=0, zone=ZONE_ds=null, isNull=false, isolatedCenterPoint=Point(0, 0), scale=0.0, specificTaskId=-1} 
WindowManager: addAppToken: AppWindowToken{d067c2823 token=Token{f969d52 ActivityRecord{18ffddd u0 com.example.myapp/.MyAppActivity t10}}} to stack=2 task= 

Может кто-нибудь, пожалуйста, помогите мне с тем же? Я нажимаю кнопку «Button». Служба должна начать работу, и только тогда остальная часть кода должна быть выполнена.

+0

разместить свой код .. – rafsanahmad007

ответ

0

Чтобы запустить службу, сделать, как показано ниже, который даст вам перезвонить, как только начало обслуживание и связанный с ней

context.bindService(new Intent(context, YourService.class), new ServiceConnection() { 
     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      //service started and bound 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      //service disconnected 
     } 
    }, Context.BIND_AUTO_CREATE); 
+0

Мне нужно поместить этот код в свою активность, и он будет гарантировать, что остальная часть кода не будет выполнена, прежде чем служба будет запущена правильно? А также мне не нужно использовать startService для запуска службы больше? – Ambi

+0

любая задача, которую вы хотите сделать после запуска службы, выполните это в методе 'onServiceConnected()'. Вам не нужно использовать 'startService()' – arjun

0
метод

Во-первыхи, в OnCreate() определяет вашу кнопку и запустить службу по нажатию кнопки:

Button button = (Button) findViewById(R.id.addButton); 
button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Intent intent = new Intent(YourActivity.this, YourService.class); 
     intent.putExtra("your_key1", "your_data1"); 
     intent.putExtra("your_key2", "your_data2"); 
     intent.putExtra("your_key3", "your_data3"); 
     startService(intent); 
    } 
}); 

В onStartCommand (Intent намерения, Int флаги, внутр startId) вашей службы:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    String data1 = intent.getStringExtra("your_key1"); 
    String data2 = intent.getStringExtra("your_key2"); 
    String data3 = intent.getStringExtra("your_key3"); 
    // do your stuff here using the passed data 
    // p.s. if your work is too long, then do them inside a thread 
    return START_NOT_STICKY; 
} 
+0

Это то, что я уже делаю, но у моего onClick есть много вещей, таких как запуск других приложений и выполнение некоторых тестов на них. Таким образом, моя Служба не запускается вообще, и приложение убивается в конце. Я не могу гарантировать, что служба уже запущена, прежде чем я буду делать другие вещи в onClick. – Ambi

+0

, затем нажмите кнопку «Показать», показывая неработоспособное диалоговое окно прогресса, и когда вся ваша работа завершится, отмените диалог прогресса. Таким образом, вы можете убедиться, что ваша служба запущена. Делайте работу в другом потоке – Beks

 Смежные вопросы

  • Нет связанных вопросов^_^