1、service的应用场景, 以及和Thread区别
1、service是什么?
service是四大组件之一,是一种可以在后台执行长时间运行操作而没有用户界面的应用组件。
service可由其他用户组件比如activity、broadcast来启动,服务一旦被启动就将一直在后台运行,
即使启动他的activity、broadcast已经被销毁了也不会搜影响。service也可以绑定activity来进行
数据交互。由于service和activity在不同的进程中,可以通过进程见的通信来进行数据传输。
service和broadcast他们都运行在主线程中,所以不能执行长时间的耗时操作。
2、service和Thread的区别
Thread是程序执行的最小单元,是分配cup的基本单位,可以用它进行异步操作。Service是安卓的
一种机制,如果是本地的service它对应是运行在主线程上的,Thread的运行是相对独立的,service
运行是依附在主线程上的相比Thread,service并不是这么独立。
android的service意思是不依赖UI,即使activity关闭了,应用程序关闭了,service仍然在后台运行。
如果你一定要在service里面做耗时操作,就必须在service里面创建子线程。service里面创建子线程
和在activity里面创建子线程有什么区别呢?activity很难对子线程进行控制,特别是当Activity被销毁
的时候你没有办法可以在获取之前创建子线程的实例。
应用场景是经常长时间在后台运行,而不用交互, 比如播放音乐,天气统计等等。
2、开启service的两种方式以及区别
1、startservice:通过activity启动服务的时候,service一旦开启,service就会在后台无限期的运行
这个时候如果你的activity被销毁了对servic是不受影响,除非手动关闭service。
当service启动后执行生命周期方法。onBind是bindservice启动的时候会调用。
onCreate是首次创建服务是,系统将调用此方法来执行一次设置程序(在调用onStartCommand和onBInd
之前调用)如果服务已在运行,则不会调用此方法,该方法只会被调用一次。
onStartCommand是每次通过startService方法启动service的时候都会被回调,这时服务正式开始。
如果你想关闭service可以调用stopService来停止服务。
onDestory是当服务不会再被使用的时候,系统会调用这个方法,可以在这个方法里面做一系列的清理及
释放,如线程、注册的监听器等等。
2、bindService:使用此方法启动service是activity和service是处于绑定状态的,可一多个activity绑定同一个
service,绑定全部取消后service机会被自动销毁。
如何创建?
1、创建BindService服务端,继承Service并在类中创建一个实现Ibinder接口的实例对象并提供公共方法
给客户端调用。
2、从onBind方法回调返回Binder实例。
3、在客户端中,从onServiceConnected()方法接收Binder,并使用提供的方法调用绑定服务。
如何创建?
1、创建继承与Service的类,并创建继承Binder的内部类。
2、在Service的onBind中把Binder类返回给客户端
3、在客户端中(Activity),通过bindService启动服务,里面传入Intent,ServiceConnection,服务常量
4、创建ServiceConnection类,它代表是客户端与服务端的连接