作者:孩子气zyj2 | 来源:互联网 | 2023-10-10 16:15
我们都知道android中service是运行在UI线程中的,怎样让service运行到非UI线程中?我知道service在注册的时候可以通过android:process:remote
我们都知道android中service是运行在UI线程中的,怎样让service运行到非UI线程中?我知道service在注册的时候可以通过android:process=":remote"指定service到remote的进程中,但是要让service运行到非UI线程怎么实现呢?
我们知道service作为一个后台服务很可能会被系统给kill掉,那么我们要想服务不被kill,有一个办法就是把他变成前台服务,startForeground(int id, Notification notification)。
在service中我们可以把耗时的操作放在一个线程中来处理,不知道这样实现算不算service运行到非UI线程。
还有一种就是service中自己的方法:onCreate(),onStart(), onStop(),onStartCommand(Intent intent, int flags, int startId)等都是属于主线程中运行的,如果是调用service中的binder对象的方法,那就不是在UI线程中了,因为binder是在binder thread中处理。这样来说,我么可以通过bindService(Service service, ServiceConnection conn, int flags)方式让activity和service建立关系,其中ServiceConnection的实现如下
ServiceConnection cOnn= new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name)
{
// TODO
}
@Override
public void onServiceConnected(ComponentName name, IBinder service)
{
// TODO
获取binder对象来调用service里面的操作,这里做的操作就是在binder thread中完成的
}
};
自己的见解,不知道对否,大牛请指教。