安卓开启服务的方法
来源:互联网 发布:csgo弹道优化参数 编辑:程序博客网 时间:2024/05/21 09:04
1.服务类:继承Service,实现onBind()方法返回IBinder对象,新建一个继承自Binder的内部类并在部内类的方法中返回活动服务交互的内容,定义一内部类对象,
public class BindService extends Service{ private int count; private boolean quit; // 定义onBinder方法所返回的对象 private MyBinder binder = new MyBinder(); // 通过继承Binder来实现IBinder类 public class MyBinder extends Binder // ① { public int getCount() { // 获取Service的运行状态:count return count; } } // 必须实现的方法,绑定该Service时回调该方法 @Override public IBinder onBind(Intent intent) { System.out.println("Service is Binded"); // 返回IBinder对象 return binder; } // Service被创建时回调该方法 @Override public void onCreate() { super.onCreate(); System.out.println("Service is Created"); // 启动一条线程,动态地修改count状态值 new Thread() { @Override public void run() { while (!quit) { try { Thread.sleep(1000); } catch (InterruptedException e) { } count++; } } }.start(); } // Service被断开连接时回调该方法 @Override public boolean onUnbind(Intent intent) { System.out.println("Service is Unbinded"); return true; } // Service被关闭之前回调该方法 @Override public void onDestroy() { super.onDestroy(); this.quit = true; System.out.println("Service is Destroyed"); }}
2.活动类:新建一ServiceConnection对象在onServiceConnected中获取Service中的IBinder返回的Binder类,
public class MainActivity extends Activity{ Button bind, unbind, getServiceStatus; // 保持所启动的Service的IBinder对象 BindService.MyBinder binder; // 定义一个ServiceConnection对象 private ServiceConnection conn = new ServiceConnection() { // 当该Activity与Service连接成功时回调该方法 @Override public void onServiceConnected(ComponentName name , IBinder service) { System.out.println("--Service Connected--"); // 获取Service的onBind方法所返回的MyBinder对象 binder = (BindService.MyBinder) service; // ① } // 当该Activity与Service断开连接时回调该方法 @Override public void onServiceDisconnected(ComponentName name) { System.out.println("--Service Disconnected--"); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取程序界面中的start、stop、getServiceStatus按钮 bind = (Button) findViewById(R.id.bind); unbind = (Button) findViewById(R.id.unbind); getServiceStatus = (Button) findViewById(R.id.getServiceStatus); // 创建启动Service的Intent final Intent intent = new Intent(this, BindService.class); bind.setOnClickListener(new OnClickListener()//绑定按钮 { @Override public void onClick(View source) { // 绑定指定Service bindService(intent, conn, Service.BIND_AUTO_CREATE); } }); unbind.setOnClickListener(new OnClickListener()//取消绑定按钮 { @Override public void onClick(View source) { // 解除绑定Service unbindService(conn); } }); getServiceStatus.setOnClickListener(new OnClickListener()//获取服务交互内容的按钮 { @Override public void onClick(View source) { // 获取、并显示Service的count值 Toast.makeText(MainActivity.this, "Service的count值为:" + binder.getCount(), Toast.LENGTH_SHORT).show(); // ② } }); }}启动流程:点击绑定按钮调用Context的bindService方法,传入Service的Intent和一个ServiceConnection对象,该ServiceConnection对象所在的类要重写onServiceConnected()方法,因为这个方法在活动与服务连接的时间调用,它的IBinder参数service即为Service类中的返回与活动交互的Binder对象,将其赋值给活动的BindService.MyBinder对象,此时由这个对象去调用Service内部的集成Binder类的MyBinder类的方法getCount()去获取与服务交互的内容。
阅读全文
0 0
- 安卓开启服务的方法
- 安卓服务(Service)的两种开启方式以及服务的生命周期
- win7快捷方式开启ORACLE服务的方法
- 开启windows7共享服务的方法
- windows开启telnet服务的方法
- redhat5 开启telnet服务的方法
- 判断是否开启定位服务的方法
- Android 检测服务是否开启的方法
- 安卓当中如何判断某一项服务是否开启
- 安卓开发工具类-判断系统服务是否开启
- 安卓开发中调用系统服务的方法
- 安卓开发之调用服务里的方法
- 46.android开启服务,调用服务里面的方法
- Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务
- 安卓手机皮套功能的开启
- 安卓Service的开启方式
- 安卓服务的使用
- Ubuntu ssh 服务开启方法
- android binder机制---servicemanager进程启动
- JPS数据交互
- HTML系列之内联式(七)
- bzoj 1196: [HNOI2006]公路修建问题 (最小生成树)
- 面向对象之抽象abstract
- 安卓开启服务的方法
- 524. Longest Word in Dictionary through Deleting
- 浅谈Android多线程之AsyncTask
- 暴力拆解《Numerical Optimization》之信任域方法(上)
- QDUOJ 蒸鱼的一个简单签到题 思维+kmp
- windows下文件在linux系统中为乱码[已解决]
- sdk build tools 25.0.0编译依赖glibc2.14
- NOIP2017模拟赛(3) 总结
- HTML系列之各种选择器(八)