断其一指------Service的使用
来源:互联网 发布:linux打开oracle服务 编辑:程序博客网 时间:2024/04/30 03:40
和Activity非常类似,只是没有用户界面。
创建和配置Service(和Activity一样一样的~~)
步骤:
1.定义一个继承Service的子类。
2.在AndroidManifest.xml文件中配置Service
生命周期
onBind() 返回一个IBinder对象,应用程序可以通过它来和Service通信
onCreate() 第一次被创建时回调
onDestroy() Service关闭之前回调
onStartCommand() 客户端调用startService 启动服务时回调
onUnbind 当Service与所有绑定的客户端断开连接上回调
通过startService和stopService可以开启和关闭服务
绑定本地Service,并与之通信
bindService(Intent service , ServiceConnection conn,int flags)
1.service 要启动的意图
2.conn 该对象用于监听访问者与Service间的联系情况,当二者连接成功的时候,回调onServiceConnected , 否则,回调onServiceDisconnected
3.flags 绑定时是否自动创建Service,0 (不自动创建) BIND_AUTO_CREATE 自动创建
Service和Activity之间通信的思路:
1.创建一个类,实现Binder。并把要通信的数据和业务逻辑写在这个类中。
2.在Service的子类中,创建1类的对象,取名为binder.
3.在onBind中,return binder
4.在Manifest清单文件中,创建一个
<action android:name="com.vincentliong.BIND"/>
5.在Activity类中,创建一个MyBinder对象。
同时,把binder通过onBind方法传入到Activity中。进而实现与Activity间的数据通信。
示例:
Service
public class CountService extends Service { private boolean quit; private int count; private MyBinder binder = new MyBinder(); //创建一个Binder的子类,把需要执行的操作写入 public class MyBinder extends Binder { public int getCount() { return count; } } public CountService() { } @Override public void onCreate() { super.onCreate(); Log.i("Demos","Create Service"); new Thread(new Runnable() { public void run() { while(!quit) { try { Thread.sleep(1000); count++; } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("Demos","Start Service"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); this.quit = true; Log.i("Demos","Destroy Service"); } public IBinder onBind(Intent intent) { Log.i("Demos","Bind Service"); return binder; } @Override public boolean onUnbind(Intent intent) { Log.i("Demos","Unbind Service"); return super.onUnbind(intent); }}
Activity类
private Button mBtnStart; private Button mBtnBind; private Button mBtnStop; private Button mBtnUnbind; private Button mBtnCount; private CountService.MyBinder binder ; private ServiceConnection conn; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_service_demo); mBtnStart = (Button) findViewById(R.id.btn_start_service); mBtnBind = (Button) findViewById(R.id.btn_bind_service); mBtnStop = (Button) findViewById(R.id.btn_stop_service); mBtnUnbind = (Button) findViewById(R.id.btn_unbind_service); mBtnCount = (Button) findViewById(R.id.btn_getcount_service); conn = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { binder = (CountService.MyBinder) service; Log.i("Demo","serviceConnected"); } public void onServiceDisconnected(ComponentName name) { Log.i("Demo","serviceDisconnected"); } }; mBtnStart.setOnClickListener(this); mBtnBind.setOnClickListener(this); mBtnStop.setOnClickListener(this); mBtnUnbind.setOnClickListener(this); mBtnCount.setOnClickListener(this); } public void onClick(View v) { Intent intent = new Intent(); intent.setAction("com.vincentliong.service.BIND_SERVICE"); switch(v.getId()) { case R.id.btn_start_service: startService(intent); break; case R.id.btn_stop_service: stopService(intent); break; case R.id.btn_bind_service: bindService(intent,conn,BIND_AUTO_CREATE); break; case R.id.btn_unbind_service: unbindService(conn); break; case R.id.btn_getcount_service: Toast.makeText(this,binder.getCount()+"",Toast.LENGTH_SHORT).show(); break; } }
生命周期:
两种情况
1.调用startService()
onCreate –> onStartCommand –> Service运行中–>onDestroy
2.调用bindService()
onCreate –> onBind –>绑定Service –> 调用unbindService解绑 –> onUnbind –> onDestroy
注:解绑服务并不会关闭服务。
“特殊服务”^_^#~~~IntentService
使用队列来管理请求的Intent,当有Intent来请求启动IntentService的时候,IntentService会将该intent放到队列中,然后开启一个Worker线程来处理该Intent。为onBind onStartCommand提供了默认实现、
使用方法:
写一个类继承自IntentService
重写onHandleIntent
可以直接通过使用IntentService来完成耗时操作
- 断其一指------Service的使用
- 断其一指------Handler消息传递机制
- 断其一指------异步任务(AsyncTask)
- 与其“混”伤其十指,不如断其一指!
- 大数据的一指禅--Hcatalog
- Activity,Service,Broadcast其创建的背景线程的关系
- 盈一指风华,浅梦一程。生命的美丽
- Service的使用
- Android Service的使用
- Android Service 的使用
- Android service的使用
- 使用Service的方式
- 关于service的使用
- Android Service的使用
- service的使用
- Service的使用一
- Service的使用二
- Jboss @Service的使用
- centos mysql 安装及配置
- spfa模板 和 拓扑排序 模板(HDU1874 和 HDU3342)
- 浩爷AC自动机快速学习方案
- mac git+shell实现快速提交push
- 嵌入式工程师考试知识点总结 微内核结构
- 断其一指------Service的使用
- UVa 1587 - Box
- 数据结构-树的存储结构
- Linux内核--内核地址空间分布和进程地址空间
- OC菜鸟成长记-OC常用数据类型
- maven学习笔记(windows)一
- 斐波拉契数列
- 多线程访问共享数据的安全问题
- WPF中播放帧序列图