我正在尝试在Android中探索Services
的世界,我刚刚写了一个小例子,其中活动有一个触发通知的按钮。
我所做的步骤是:
Intent intent = new Intent(context, MyService.class);
PendingIntent
并将其发送至NotificationManager
然后,一旦我点击通知,服务(MyService
)就会启动并启动音乐配乐。
使用日志记录我看到按钮的单击和MyService
的操作都发生在主线程上,我想知道如何在单独的后台线程中运行服务
P.S。 MyService
正在扩展Service
而不是IntentService
,因为最后一个会在执行后终止
答案 0 :(得分:0)
onStartCommand()
的主要主题上调用 Service
。如果您要启动后台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
需要停止时根据需要关闭正在运行的后台线程。
答案 1 :(得分:0)
您是否曾与RXjava合作过?
1 - 获取librery: 在build.gradle中写下这两行:
编译'io.reactivex.rxjava2:rxandroid:2.0.1'
编译'io.reactivex.rxjava2:rxjava:2.1.2'
2 - 在onStartCommand中写下这些行:
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内写下您想要的内容,它将在后台线程上执行
我希望它会有所帮助