Servers与Activity 的线程关系;Service的生命周期;Service与Activity通信
来源:互联网 发布:淘宝的兄弟翡翠假货 编辑:程序博客网 时间:2024/05/21 06:39
我在Service的onCreate方法中让线程sleep 10秒钟,Activity阻塞了!
我在Activity 中新建一子线程,在子线程中启动Service,Activity还是阻塞了!
在Service里面新建一线程,进行延时操作,Activity不再阻塞了!
Service的生命周期:
用startService(intent)启动Services,第一次运行执行onCreate---onStartCommand------onStart,之后再运行就不会执行onCreate了,其中onStart其实是被onStartCommand调用的,把onStartCommand的返回值改了,onStart就不会执行了。
用bindService(intent, conn, Context.BIND_AUTO_CREATE)启动Services。第一次运行执行onCreate----onBind。在unbindService(conn)之前再次执行bindService是没用的。其中Context.BIND_AUTO_CREATE==1;如果此参数填0,那么bindService后service里面的代码不会执行,bindService(intent, conn, 0)和startService(intent)一起执行,service里面的onBind会执行。
unbindService(conn)之后执行onUnbind-----onDestroy。
Activity与Service的一种通信方式:
通过bindService(intent, conn, Context.BIND_AUTO_CREATE)启动service,其中第二个参数是ServiceConnection的对象,需实现两个方法,第一个是public void onServiceDisconnected(ComponentName name),unbind时调用这方法,onServiceConnected(ComponentName name, IBinder service),当Service的onBind方法有返回时调用。第二个参数是onBind的返回值。
传递数据:
如果要从Service里往Activity传值,就定义一个类继承自IBinder的实现类Binder,比如命名为MyBinder,建议自定义的类MyBinder是Service的内部类,可以直接在MyBinder里面写带返回值的方法,返回要传的数据,也可以返回Service的对象,在Service里写返回方法。
class MyBinder extends Binder{public MyService getService(){return MyService.this;}}
接收数据:
首先接收MyBinder对象:MyBinder binder=(MyBinder)service;,如果方法是写在MyBinder类里面,就直接调用方法,如果不是就接着得到Service的对象MyService ser=binder.getService();,然后调用Service中自定义的方法getA()得到数据。
public void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stubMyBinder binder=(MyBinder)service;MyService ser=binder.getService();int a=ser.getA();}
Service的AIDL方式通信:
1.在工程下建立一个以aidl结尾的文件,如IService,语法类似java。
比如:
package wei.liu;interface IServer { String getValue(); }保存,如果语法没问题,会在gen/wei.liu/下面生成一个IService.java文件。
IMyService.aidl文件的内容与Java代码非常相似,但要注意,不能加修饰符(例如,public、private)、AIDL服务不支持的数据类型(例如,InputStream、OutputStream)等内容。
2.建立一个继承Service类的子类,比如MyService,在MyService类建立一个继承IService.Stub的内部类,比如MyServiceImpl,需重写getValue方法。IService.Stub是IService.java的内部类。
3.给MyService的onBind方法返回MyServiceImpl的对象。
4.在AndroidManifest,xml文件中给Service加个Action,如下:
<service android:name="MyService"> <intent-filter> <action android:name="wei.liu.IService"/> </intent-filter> </service>
// 绑定AIDL服务 bindService(new Intent("wei.liu.IService"), serviceConnection, Context.BIND_AUTO_CREATE);与上面用的方法一样,第二个参数是ServiceConnection对象。注意:启动service并不一定要指定启动哪个类,也可以用Action去启动。
- Servers与Activity 的线程关系;Service的生命周期;Service与Activity通信
- (转)Servers与Activity 的线程关系;Service的生命周期;Service与Activity通信
- Activity与service的生命周期及其关系
- Service与Activity的关系
- Activity 与 Service 的通信
- Service的生命周期与Activity生命周期区别
- service汇总(service模拟后台下载、service刷新UI、service与Activity生命周期关系、service和活动间的通信)
- android activity与service的生命周期
- Activity与Service生命周期
- Activity与Service生命周期
- Service的运用与activity的通信
- Android的Service与Activity通信
- Activity与Service通信的方式有三种:
- activity 与 service 数据的通信
- android activity与service之间的通信
- Activity与Service通信的方式
- Activity与Service通信的方式有三种:
- Activity与Service通信的方式有三种
- 北大ACM poj2301
- js最强大,最简洁的【禁止输入中文】
- Scala学习笔记(四) - 变量,常量,函数及类的定义
- Eclipse快捷键
- Smarty 循环语句
- Servers与Activity 的线程关系;Service的生命周期;Service与Activity通信
- CXF实现用户验证(相比前面的另外的一种方法完全Spring)
- cocos2d-x学习之连帧动画制作
- HDU 1698 Just a Hook
- form表单javascript验证(防遗忘)
- ActivityManager框架解析
- 华为boss力荐公司高层看的一篇文章,真的很经典!!!
- MonkeyRunner_MonkeyRunner 录制和播放脚本
- (转)Ubuntu 10.04开机画面低分辨率问题解决方案