Android基础知识整合篇——Service知识点
来源:互联网 发布:知乎图片保存不了 编辑:程序博客网 时间:2024/05/18 16:14
继续完成连载博客,上次介绍的是Broadcast相关的基础知识,这次为大家带来Service的相关解释和说明。希望博客能给诸位一点小小的帮助!
四大组件——service
服务:service是安卓中实现程序后台运行的解决方案,它非常适合执行那些不需要和用户交互而且还要求长期运行的任务。需要注意:服务不是独立运行在进程中的,依赖于服务创建的应用程序进程,当其被杀死时,服务也会被终结。
定义一个服务:
public class Myservice extends Service{@Overridepublic IBinder onBind(Intent intent){return null;}@Overridepublic int onStartCommand(Intent intent,int flags,int startId){return super.onStartCommand(intent,flags,startId);}@Overridepublic void onDestroy(){super.onDestroy();}}建立完类后,每个服务还需要在AndroidMainifest.xml文件注册才能生效:
<service android:name=".Myservice"></service>
Intent startIntent=new Intent(this,Myservice.class);startService(startIntent);//启动服务
Intent stopIntent=new Intent(this,Myservice.class);stopService(stopIntent);//停止服务
上面Myservice类里有个onBind()方法我们还没有解释,其实它的作用就是用于活动和服务的通信。
具体方法:
public class Myservice extends Service{private DownloadBinder mBinder=new DownloadBinder();class DownloadBinder extends Binder{public void startDownload(){Log.d("Myservice","start");}public int getProgress(){Log.d("Myservice","getProgress");return 0;}}@Overridepublic IBinder onBind(Intent intent){return mBinder;}}创建一个mBinder实体写入方法,然后在MainActivity里开启连接:
private ServiceConnection connection=new ServiceConnection(){@Overridepublic void onServiceDisconnected(ComponentName name){}@Overridepublic void onServiceConnected(ComponentName name,IBinder service){downloadBinder=(Myservice.DownloadBinder)service;downloadBinder.startDownload();downloadBinder.getProgress();}}然后使用两个Button一个绑定服务,一个解绑服务:
case R.id.bind_service:Intent bindIntent=new Intent(this,Myservice.class);bindService(bindIntent,connection,BIND_AUTO_CREATE);//绑定服务break;case R.id.unbind_service:unbindService(connection);//解绑服务break;这样就基本实现了服务的绑定和解绑。
服务的更多技巧
由于郭霖大神的建议,为了更好的程序性能和优化用户体验我们应当:节制地使用Service
如果应用程序当中需要使用Service来执行后台任务的话,请一定要注意只有当任务正在执行的时候才应该让Service运行起来。另外,当任务执行完之后去停止Service的时候,要小心Service停止失败导致内存泄漏的情况。
当我们启动一个Service时,系统会倾向于将这个Service所依赖的进程进行保留,这样就会导致这个进程变得非常消耗内存。并且,系统可以在LRU cache当中缓存的进程数量也会减少,导致切换应用程序的时候耗费更多性能。严重的话,甚至有可能会导致崩溃,因为系统在内存非常吃紧的时候可能已无法维护所有正在运行的Service所依赖的进程了。为了能够控制Service的生命周期,Android官方推荐的最佳解决方案就是使用IntentService,这种Service的最大特点就是当后台任务执行结束后会自动停止,从而极大程度上避免了Service内存泄漏的可能性。
详情请见:http://blog.csdn.net/guolin_blog/article/details/42238627
使用IntentService例子:public class MyIntentService extends IntentService{public MyIntentService(){super("MyIntentService");//调用父类的有参构造函数}@Overrideprotected void onHandleIntent(Intent intent){Log.d("MyIntentService","Thread id is "+Thread.currentThread().getId());}@Overridepublic void onDestroy(){super.onDestroy();Log.d("MyIntentService","onDestroy excuted");}}其他步骤和一般Service差不多,不再做赘述。
IntentService的优势:它能够启动线程和停止,任务后台结束后会自动停止,大大方便了使用。
----------------------------------------------------------------------------------------------------------------------------------------------------------
好了,关于四大组件——Service所涉及的各个方面基本都解释到了,如果还有不全面或是解释有误的点,欢迎广大看官给予点评和建议,本人必定细心查看,纠察改错。
敬请关注下一篇连载:四大组件——内容提供器!
- Android基础知识整合篇——Service知识点
- Android基础知识整合篇——Activity知识点
- Android基础知识整合篇——广播接收器知识点
- Android基础知识整合篇——ContentProvider知识点
- Android基础知识整合篇——UI(部分)知识点
- Android知识点学习笔记——Service服务
- android service(远程service) 知识点
- Android面试知识点总结(2)——安卓基础知识篇
- Android Service知识点总结
- android service(本地) 知识点
- Android Service 知识点总结
- Android知识点之service
- android中的Service基础知识
- android service基础知识详解
- 【Android基础知识】Service
- 多媒体技术基础知识——简要知识点
- C++核心知识点整理——基础知识
- Java知识点(一)——基础知识
- linux学习笔记(5):dup,dup2,fcntl
- 使用Session防止表单重复提交
- Apache、Mysql、php搭建指南
- FFT
- 公司项目架构的演变过程
- Android基础知识整合篇——Service知识点
- 2016.06.01
- Android SwipeRefreshLayout的使用
- hdu 4609 3-idiots (FFT)
- caffe 安装与配置 (仅CPU版)以及Ubuntu 14.04 64位机上用Caffe+MNIST训练Lenet网络
- VS2013配置CameraDS类
- Java:按值传递还是按引用传递详细解说
- JQuery记住用户名和密码的具体实现
- java-script简单语法练习-第二天