android service理解
来源:互联网 发布:教师网络课程心得 编辑:程序博客网 时间:2024/06/06 00:25
关于Service最基本的用法是如何启动一个Service,启动Service的方法和启动Activity很类似,都需要借助Intent来实现,下面我们就通过一个具体的例子来看一下。
新建一个Android项目,项目名就叫ServiceStudy
然后新建一个MyService继承自Service,并重写父类的onCreate()、onStartCommand()和onDestroy()方法,新建一个Activity类来操作启动结束Service,并且控制和Service的绑定和解绑Activity
public class ServiceActivity extends Activity { MyServiceConn coon; MyService.MyBinder mb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_service); coon =new MyServiceConn(); } public void openService(View v){ Intent intent =new Intent(ServiceActivity.this, MyService.class); startService(intent); } public void stopService(View v){ Intent intent =new Intent(ServiceActivity.this, MyService.class); stopService(intent); } public void bindService(View view){ Intent intent =new Intent(ServiceActivity.this, MyService.class); bindService(intent,coon, Service.BIND_AUTO_CREATE); } public void unbindService(View view){ unbindService(coon); }public void show(View view){ mb.fangfa();} public class MyServiceConn implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { mb = (MyService.MyBinder) service; } @Override public void onServiceDisconnected(ComponentName name) { } }}
我们的Activity写好,里边有四个按钮方法分别是启动、销毁、绑定、解绑Service;通过Button的点击事件控制Service 的状态,我们来看看Service里的逻辑代码
public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { Log.d("onB","绑定服务"); return new MyBinder(); } @Override public boolean onUnbind(Intent intent) { Log.d("onUnbind","解绑服务"); return super.onUnbind(intent); } @Override public void onCreate() { super.onCreate(); Log.d("onCreate","创建"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d("onStart","开启"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); Log.d("onDestroy","销毁"); } public void fangfa1(){ Toast.makeText(this, "访问到service", Toast.LENGTH_SHORT).show(); }public class MyBinder extends Binder{ public void fangfa(){ fangfa1(); }}}当启动一个Service的时候,会调用该Service中的onCreate()和onStartCommand()方法。如果当前Service已经被创建过了,不管怎样调用start()方法,onCreate()方法都不会再执行。每次都只会有onStartCommand()方法中的打印日志。
然后点击一下StopService按钮就可以将MyService停止掉了。
2.Activity和MyService之间建立关联
bindService()方法接收三个参数,第一个参数就是刚刚构建出的Intent对象,第二个参数是前面创建出的ServiceConnection的实例,第三个参数是一个标志位,这里传入BIND_AUTO_CREATE表示在Activity和Service建立关联后自动创建Service,这会使得MyService中的onCreate()方法得到执行,但onStartCommand()方法不会执行。
然后如何我们想解除Activity和Service之间的关联怎么办呢?调用一下unbindService()方法就可以了,这也是Unbind Service按钮的点击事件里实现的逻辑。
那么如果我们既点击了Start Service按钮,又点击了Bind Service按钮会怎么样呢?这个时候你会发现,不管你是单独点击Stop Service按钮还是Unbind Service按钮,Service都不会被销毁,必要将两个按钮都点击一下,Service才会被销毁。也就是说,点击Stop Service按钮只会让Service停止,点击Unbind Service按钮只会让Service和Activity解除关联,一个Service必须要在既没有和任何Activity关联又处理停止状态的时候才会被销毁。
阅读全文
0 0
- android 理解service服务
- Android 中的 Service理解
- android之service理解
- Android Service 深入理解
- android service简单理解
- android编程-Service理解
- Android service理解
- Android Service生命周期理解
- Android Service onStartCommand 理解
- android service理解
- android service理解
- Android Service个人理解
- 理解Android Service
- 清晰理解 Android Service
- 关于Android-Service的理解
- 理解Android的本地Service和跨进程Service
- Android 中Service简单理解(生命周期)
- Android中Service方式使用的理解
- 考研英语
- 【java】枚举类的使用
- MNIST机器学习入门
- oracle sql语句性能优化
- c++多态性的一些思考
- android service理解
- 华为2016研发工程师编程题之删数据
- 为NetBeans8.2安装配置Struts框架
- PAT甲级1009
- zynq linux 设置静态ip地址
- noi.openjudge_P7627(鸡蛋的硬度)
- Linux内核的编译(ARM-Linux)
- logistic回归原理
- Linux内核驱动模块的删除