关闭

Android基础知识整合篇——Service知识点

标签: androidservice
793人阅读 评论(0) 收藏 举报
分类:

继续完成连载博客,上次介绍的是Broadcast相关的基础知识,这次为大家带来Service的相关解释和说明。希望博客能给诸位一点小小的帮助!


四大组件——service

 

服务:service是安卓中实现程序后台运行的解决方案,它非常适合执行那些不需要和用户交互而且还要求长期运行的任务。需要注意:服务不是独立运行在进程中的,依赖于服务创建的应用程序进程,当其被杀死时,服务也会被终结。


定义一个服务

public class Myservice extends Service{
	@Override
	public IBinder onBind(Intent intent){
		return null;
	}
	@Override
	public int onStartCommand(Intent intent,int flags,int startId){
		return super.onStartCommand(intent,flags,startId);
	}
	@Override
	public void onDestroy(){
		super.onDestroy();
	}
}
建立完类后,每个服务还需要在AndroidMainifest.xml文件注册才能生效:

<service android:name=".Myservice">
</service>


启动服务和停止服务:在MainActivity里onCreate()使用Intent

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;
		}
	}
	@Override
	public IBinder onBind(Intent intent){
		return mBinder;
	}
}
创建一个mBinder实体写入方法,然后在MainActivity里开启连接:

private ServiceConnection connection=new ServiceConnection(){
	@Override
	public void onServiceDisconnected(ComponentName name){
		
	}
	@Override
	public 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");//调用父类的有参构造函数
	}
	@Override
	protected void onHandleIntent(Intent intent){
		Log.d("MyIntentService","Thread id is "+Thread.currentThread().getId());
	}
	@Override
	public void onDestroy(){
		super.onDestroy();
		Log.d("MyIntentService","onDestroy excuted");
	}
}
其他步骤和一般Service差不多,不再做赘述。

IntentService的优势:它能够启动线程和停止,任务后台结束后会自动停止,大大方便了使用。


Service生命周期




----------------------------------------------------------------------------------------------------------------------------------------------------------

好了,关于四大组件——Service所涉及的各个方面基本都解释到了,如果还有不全面或是解释有误的点,欢迎广大看官给予点评和建议,本人必定细心查看,纠察改错。尴尬
 
敬请关注下一篇连载:四大组件——内容提供器!再见






1
0
查看评论

Android Service组件开发用到的几个知识点

请尊重他人劳动成果,请勿随意剽窃,转载请注明,谢谢!转载请注明出处:http://blog.csdn.net/evan_man/article/details/50835507 启动方式 启动Local Service(Client跟Service在同一个进程) 这类服务有个特点,就是它主要用...
  • evan_man
  • evan_man
  • 2016-07-01 12:26
  • 3983

Android知识点之service

  • niohandsome
  • niohandsome
  • 2016-11-26 20:28
  • 125

Android Service 知识点总结

生命周期 onCreate()会在创建服务的时候调用,而onStartCommand()在每次服务启动的时候调用,让Servicekill后自动重启在onStartCommand函数中返回 START_REDELIVER_INTENT
  • never_cxb
  • never_cxb
  • 2015-08-01 09:02
  • 412

Android基础知识整合篇——广播接收器知识点

好的,我又来完成我的个人第一个连载博客了,上次介绍的是Activity相关的基础知识,这次为大家带来广播接收器的相关解释和说明。希望博客能给诸位一点小小的帮助,也就是对我博客最大的鼓励! 四大组件——BroadcastReceiver 广播分类: 标准广播:是一种完全异步执行的广播,它无法被...
  • wxj1018
  • wxj1018
  • 2016-05-31 16:24
  • 855

Android基础知识点总结

Android基础知识点总结在学习了很长一段时间的Android基础内容,如果不做及时的复习,那么后面的项目学习起来可能就没那么顺利了,并且复习也是一件很愉快的事。古人有云:“学而时习之不亦说乎”,应该就是这个道理。~本文大纲~Android基础知识点总结 Day01 01Android系统中我们常...
  • u010495996
  • u010495996
  • 2016-05-07 19:25
  • 5665

android四大组件之service知识点最强总结

1.基本概念Service只能在后台运行,适合那些不需要界面的操作,像是播放音乐或者监听动作等,因为它 的名字就已经提示了:它就是一个服务。 Service同样也是运行在主线程中,所以不能用它来做耗时的请求或者动作,否则就会阻塞住主线程。如果真的要这么做,可以跟Activity一样的做...
  • hunterliy
  • hunterliy
  • 2016-11-01 19:45
  • 207

android service(本地) 知识点

service想必在android开发的过程中基本上都
  • hunan_lijie_
  • hunan_lijie_
  • 2014-11-13 15:18
  • 419

Android各种知识点最全总结,面试必备

原文链接:Android各种知识点最全总结,面试必备 FrameLayout(框架布局) 此布局是五中布局中最简单的布局,Android中并没有对child view的摆布进行控制,这个布局中所有的控件都会默认出现在视图的左上角,我们可以使用android:layout_ma...
  • xhmj12
  • xhmj12
  • 2016-11-16 11:08
  • 894

Android基础知识整合篇——Activity知识点

Android基础知识部分整合连载篇——四大组件——Activity     今天,我着手开始android基础知识总体整合以及复习(结合郭霖大神的《第一行代码》),来对我这段时间碎片化的知识进行总结和整理,写下这些连载博文为的是方便读者对基础知识的回顾,以及我自己对所学知识点的...
  • wxj1018
  • wxj1018
  • 2016-05-30 20:38
  • 5397

Android知识点最新最全梳理—Android面试大纲

热文导读 | 点击标题阅读 干货 | Android 8.0正式版发布:Android O 新特性和行为变更总结 吊炸天!74款APP完整源码! AgentWeb 是基于 Android WebView 一个功能完善小型浏览器库 公众号:...
  • AMEPRE88
  • AMEPRE88
  • 2017-08-23 11:08
  • 324
    个人资料
    • 访问:21608次
    • 积分:472
    • 等级:
    • 排名:千里之外
    • 原创:25篇
    • 转载:1篇
    • 译文:0篇
    • 评论:3条
    博客专栏
    最新评论