service怎么运行到非UI线程

我们都知道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中完成的
}
};


自己的见解,不知道对否,大牛请指教。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值