大四实习准备6_android服务

2015-5-9

1.服务是什么

2.Android多线程编程

3.服务的基本用法

3.1定义服务

1)创建myService类,使其继承Service类,

2)再实现onBind()方法(用于活动和服务的绑定),重写onCreate()(服务创建时调用)、onStratCommand(服务启动时调用)、onDestroy()方法(服务销毁时调用)。

3)每一个服务(事实上是四大组件)都需在AndroidManifest.xml中注册才能生效

3.2启动和停止服务

借助Intent。

启动:

1 Intent startIntent = new Intent(this,myService.class);
2 startService(startIntent);//启动服务

首次执行startService(startIntent)后,myService中的onCreate()方法、onStratCommand()方法会依次执行。

而之后再执行startService(startIntent)(执行stopService()之后?还是直接再次执行startService()?),只有onStratCommand()方法会执行。

因为该服务已经创建过了,就不执行onCreate()方法了。

停止:

1.

1 Intent stopIntent = new Intent(this,myService.class);
2 stopService(startIntent);//停止服务

onDestroy()方法会执行。

2.

或者,服务也可以自己使自己停止下来,即在myService类中的某个位置调用stopSelf()方法也能停止服务。

3.3活动和服务进行通信

利用myServiece类中的onBind()方法。

//...

4.服务的生命周期

1.startService()----stopService()/stopSelf()

2.bindService()----unbindService()

3.startService() && bindService() ---- stopService() && unbindService() (?:或者直接stopSelf(),没试验过)

5.服务的更多技巧

5.1使用前台服务

前台服务与普通服务(即后台服务)的两点主要的区别在于,

1)当系统出现内存不足的情况时,可能会回收后台服务,而不会回收前台服务。

2)后台服务是默默运行,看不到的。而前台服务会一直有一个正在运行的图标在系统的状态栏显示,下拉后可以看到详细信息,类似通知的效果。比如墨迹天气就是运用这一点。

用法:在myService()的onCreate()方法中利用通知+startForeground()方法。

//具体code查书吧。

5.2使用IntentService

服务中的代码是默认运行在主线程中的,所以如果直接在服务中进行一些耗时的操作,就很容易出现ANR(Application Not Responding)情况。

处理方法一是,多线程+执行完毕后自动停止

 1 public class myService extends Service{
 2     @override
 3     public IBinder onBind(Intent intent){
 4         return null;
 5     }
 6
 7     @override
 8     public int onStartCommand(Intent intent,int flags,int startId){
 9         new Thread( new Runnable(){
10             @override
11             public void run(){
12                 //处理具体的逻辑
13                 stopSelf();
14             }
15         }).start();
16         return super.onStartCommand(intent,flags,startId);
17     }
18 }

处理方法二是,不用考虑多线程和处理完毕后自动停止,IntentService类就自己实现了这两个功能。

 1 public class myIntentService extends IntentService{
 2
 3     public myIntentService(){
 4         super("myIntentService");//调用父类的有参构造函数
 5     }
 6
 7     @override
 8     protected void onHandleIntent(Intent intent){
 9         //处理具体的逻辑
10         //打印当前线程的id
11         Log.d("myIntentService","Thread id is " + Thread.currentThread().getId());//可以发现和主线程的线程id不太
12     }
13
14     @override
15     public void onDestroy(){
16         super.onDestroy();
17         Log.d("myIntentService","onDestroy executed");//可以发现这个方法会自动执行,即使没有调用stopService()或stopSelf()方法。
18     }
19 }

6.服务的最佳实践-----后台执行的定时任务

//code

时间: 2024-10-06 15:17:55

大四实习准备6_android服务的相关文章

大四实习准备5_android广播机制

2015-5-1 android 广播机制 5.1简介 分为标准广播(Normal broadcasts)(无先后顺序,几乎同时接收,不可截断)和有序广播(Ordered broadcasts)(有先后顺序,可以截断)两种. 5.2接收系统广播 广播接收器对感兴趣的广播进行注册,这样就能监听到对应的广播,并在内部处理相应的逻辑. 注册广播的方式有两种,分别为在代码中注册(动态注册)(缺点:必须在程序启动之后才能接收到广播,因为注册的逻辑是写在onCreat()方法中的)和在AndroidMani

大四实习准备4_java内部类

2015-4-30 [昨天又可耻地休息了一天,懒劲比较大啊.跟懒劲有直接关系,这几天对幸福的感知也黯淡了,对未来的幸福不是那么渴望了.表现在对亲情和爱情上. 我想生活的本意是积极进取.茁壮生长并时常感激啊.所以要热爱生活啊.心胸要宽阔.加油^O^ 书: 1.周昌乐,<禅悟的实证:禅宗思想的科学发凡>,东方出版社,2006年 2.库比特,<生活 生活:一种正在来临的生活信仰>,宗教文化出版社,2004年 3.克里希那穆提,<爱的觉醒>,深圳报业集团出版社,2006年] J

大四实习准备2

2015-4-24 Java 异常处理 可以有多个catch;ArrayIndexOutOfBoundsException类是Exception类的子类RuntimeException类的一个间接子类;finally{}一定被执行; 异常分类: 1>继承关系 Object类->Throwable类->Error类(通常是硬件运行错误,通常不能通过程序来修改)(未捕获异常).Exception类 Exception类->RuntimeException类(若不进行异常处理,可能编译时

大四实习准备

2015-4-23 Java构造器 与类名同名;无返回值(void也不行);被不同的修饰符修饰是有区别的;当构造函数被private修饰时,只有本类可访问.其他类可以通过该类的get函数得到对象.如单子模式;子类的构造函数默认调用super(),即父类的构造函数,然后再回到子类自己的构造函数.子类的构造函数中写了super()效果也一样,相当于没写(只能写在第一句,否则出错);构造函数可以重载(当父类有多个构造函数时,可以用super(xxx)来指定调用父类的哪个构造函数);当自定义了构造函数后

大四实习准备3

4.25.27无耻地懒散了.....26号陪女朋友去了.今天28号,继续加油! 2015-4-28 Java 多线程 (java中类不能多继承,可以多层继承:接口则都可以) 定义和创建: 方法一:继承Thread类 方法二:实现Runnable接口 : 启动线程: 线程只能被启动一次,多次启动线程,即多次调用start方法时,会发生IllegalThreadStateException异常: //以上综合来个code 线程的生命周期: 线程调度: (join()方法的状态变化?) 1.睡眠方法

大四狗:我的java历程——越努力,越幸运。

大二的时候写过一篇博客,< 作为一名计算机学院普通的大学生如何提高兴趣敲代码 >,没想到当时引起了很多同学的共鸣,有的人觉得受到了鼓舞,有的人觉得看到这篇文章已经大四,要改变也太晚了.然而对于我,写完那篇博客之后发生了很多事情,在java学习上有坚持,有懈怠,有前进,亦有低谷.好在现在,起码是这会儿,我还在低头看路,还在走上坡路.那会儿到现在大概一年半的时间,我就来说说这一年半的时间我的java历程吧,还是和上次一样,希望大家在看完我的故事之后,可以留下感想.或是鼓励,分享自己学习java的经

大三学生关于实习和考研的安排

[私信] 您好,我是大三计算机学生,就读985高校,学习了很多知识,有的自己掌握还好,有的还很肤浅, 例如编译原理,概率论,学了这么多知识完全串在一起很有难度,我想大三之后去实习,体会软件工程,数据库以及社会的需求,然后大四在准备考研,也就是晚一年,您有什么好建议么,社会是我想的这样么? [回复] CSDN私信限字数之后,我觉得很多时候不足以让大家清楚地表达了.我不很明白你的想法.大三之后实习,不就是大四实习吗?还就是暑假实习一段时间?大四准备考研,这怎么叫晚一年?你想像中的社会是什么?对你的问

51CTO学院给你精彩IT人生--写在51CTO学院成立2周年

51CTO学院给你精彩IT人生 --写在51CTO学院成立2周年 忙忙碌碌的日子总是过得很快,转眼51CTO学院成立已经2周年了,他的发展也正和我们当初设想的一样风生水起,蓬勃发展,现已成为全国最大的IT在线教育网站. 结缘51CTO 从事微软思科IT职业化培训多年和企业IT技术支持多年,把很经验整理成技术文章,分享给IT人,让别人少走弯路,就把一些原创IT类文章分享到了百度博客,新浪博客,虽然博客注册用户数量巨大,然关注IT人数远远不如关注六爻八卦的人数多,发现自己的IT技术文章访问量聊聊无几

计算机行业小总结

眼看着就要大四实习了,听了陈老师的一个小讲座,自己做了个计算机行业的小总结. 首先,需要了解 软件产品形成的过程:市场需求 --> 策划 --> 规划 --> 设计 --> 评估 --> 开发(项目管理.测试)--> 营销 --> 运维 软件项目的形成过程:市场营销 --> 售前支持 --> 需求分析 --> 概要设计 --> 详细设计 -->  编码 --> 测试 --> 部署实施 --> 技术支持 好了,现在说一