热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

service怎么运行到非UI线程

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


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



推荐阅读
author-avatar
孩子气zyj2
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有