0

我想在Android中探索Services的世界,我剛剛寫了一個小例子,其中活動有一個觸發通知的按鈕。通過PendingIntent在後臺線程中啓動服務

的步驟我是:

  • 創建Intent intent = new Intent(context, MyService.class);
  • PendingIntent插入這一點,並把它發送到NotificationManager

然後,當我點擊該通知,服務( MyService)已啓動並啓動音樂配樂。

使用記錄我看到按鈕的點擊的MyService動作都發生在主線程,我想知道我怎樣才能使該服務運行在一個單獨的後臺線程

附:因爲這最後一個終止執行一次

回答

0

onStartCommand()被稱爲主線程在ServiceMyService正在擴大Service而不是IntentService。如果您想啓動背景Thread來完成這項工作,您可以創建自己的Thread並在onStartCommand()內啓動它。事情是這樣的:

Thread t = new Thread(new Runnable() { 
    public void run() { 
     // Put whatever code you want to run in background thread here 
    } 
}).start(); 

請確保您有將關閉正在運行的後臺線程,如果必要時您Service需要停止代碼。

+0

謝謝大衛,我會嘗試:)我認爲這是整個服務是需要在單獨的線程中啓動 – kioli

0

你有沒有使用過RXjava?

1得到librery: 寫在的build.gradle這兩條線:

編譯 'io.reactivex.rxjava2:rxandroid:2.0.1'

編譯「io.reactivex .rxjava2:rxjava:2.1.2' 在onStartCommand

2 - 寫這些行:

io.reactivex.Observable.just(s).subscribeOn(AndroidSchedulers.mainThread()) 
                .observeOn(Schedulers.io()) 
                .subscribe(new io.reactivex.Observer<String>() { 
                 @Override 
                 public void onSubscribe(@NonNull Disposable d) { 

                 } 

                 @Override 
                 public void onNext(@NonNull String s) { 

                  //Write what you want here!! ;) 

                 } 

                 @Override 
                 public void onError(@NonNull Throwable e) { 

                 } 

                 @Override 
                 public void onComplete() { 

                 } 
                }); 

和內部onNext寫你什麼都想要,它會在執行後臺線程

我希望這將是有益的

+0

謝謝Mostafa,當時我試圖做到這一點,沒有外部庫:) – kioli

相關問題