Android四大组件之服务--Service
来源:互联网 发布:app生成器软件 编辑:程序博客网 时间:2024/06/05 19:11
1.概念:
(1).Service可以说是一个在后台运行的Activity。它不是一个单独的进程,它只需要应用告诉它要在后台做什么就可以了。
(2).它要是实现和用户的交互的话需要通过通知栏或者是通过发送广播,UI去接收显示。
(3).它的应用十分广泛,尤其是在框架层,应用更多的是对系统服务的调用。
2.作用:
(1).它用于处理一些不干扰用户使用的后台操作。如下载,网络获取。播放音乐,它可以通过Intent来开启,同时也可以绑定到宿主对象(调用者例如Activity上)来使用。
(2).如果说Activity是显示前台页面的信息,那么Service就是在后台进行操作的。如果Service和前台UI进行交互的话可以通过发送广播或者通知栏的方式。
2.Service的生命周期
图片来自网络:
注意:本地服务中,onStart已经被onStartCommand方法取代
Service有两种启动方式:
1.通过startService()开启服务
生命周期:
第一次开启服务:onCreate()-->onStartCommand()
除了第一次以后每一次开启服务都是:onStartCommand()通过startService()开启的服务,只能通过stopService()方法结束
2.bindService开启服务:将服务的生命周期和调用者的生命周期绑在一起
第一次开启服务:onCreate()-->onBind()
第二次之后的每一次:什么都不执行
通过bindService开启的服务一定要在activity销毁的时候或销毁前解绑,并且绑定一次解绑一次,不能多次解绑
startService开启服务、bindService开启服务的区别:
startService开启服务只能通过stopService()结束
bindService和activity生命周期绑在一起
bindService可以实现与调用者的交互(Activity和广播可以开启Service)
startService:一般用于后台下载
bindService:一般用于音乐播放器
下面是实现的具体代码:
/** * service与activity交互的步骤 * 1.在service中创建Binder的实现类(编写一个类继承Binder) * 2.在实现类中写具体方法 * 3.在onBinder方法中返回实现类的对象 * 4.在调用者中声明Binder实现类的对象 * 5.在onServiceConnected中拿到Binder对象 * 6.调用Service中的方法 */
MainActivity:
public class MainActivity extends AppCompatActivity { Button but_start, but_stop, but_bind, but_unbind, but_myExample,but_link; MyServiceConnection conn; MyService.MyBinder myBinder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /**开启服务*/ // startService(new Intent(MainActivity.this, MyService.class)); conn = new MyServiceConnection(); init(); } private void init() { but_start = (Button) findViewById(R.id.but_start); but_stop = (Button) findViewById(R.id.but_stop); but_bind = (Button) findViewById(R.id.but_bind); but_unbind = (Button) findViewById(R.id.but_unbind); but_myExample = (Button) findViewById(R.id.but_myExample); but_link= (Button) findViewById(R.id.but_link); but_start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /**开启服务*/ startService(new Intent(MainActivity.this, MyService.class)); } }); but_stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /**停止服务*/ stopService(new Intent(MainActivity.this, MyService.class)); } }); but_bind.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /**绑定服务 * 参数一:Intent service * 参数二:ServiceConnection conn 监听服务连接状态 * ServiceConnection 是一个接口 需要写一个类实现它 * 参数三:int flags :连接的方式 * Service.BIND_AUTO_CREATE自动创建连接*/ bindService(new Intent(MainActivity.this, MyService.class), conn, Service.BIND_AUTO_CREATE); } }); but_unbind.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /**解绑服务*/ unbindService(conn); } }); //例子 but_myExample.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myBinder.myExample(); } }); //连用 but_link.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //开启 Intent intent=new Intent(MainActivity.this, MyService.class); startService(intent); //绑定 bindService(intent,conn,Service.BIND_AUTO_CREATE); } }); } public class MyServiceConnection implements ServiceConnection { //服务连接 @Override public void onServiceConnected(ComponentName name, IBinder service) { myBinder = (MyService.MyBinder) service; } //服务未连接 @Override public void onServiceDisconnected(ComponentName name) { } } //销毁 @Override protected void onDestroy() { super.onDestroy(); unbindService(conn); }}MyService:
public class MyService extends Service { //第一次开启服务时调用 @Override public void onCreate() { super.onCreate(); Log.i("MyService", "onCreate"); } //绑定 @Nullable @Override public IBinder onBind(Intent intent) { Log.i("MyService", "onBind"); return new MyBinder(); } //解绑 @Override public boolean onUnbind(Intent intent) { return super.onUnbind(intent); } //开始 @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("MyService", "onStartCommand"); return super.onStartCommand(intent, flags, startId); } //销毁 @Override public void onDestroy() { super.onDestroy(); Log.i("MyService", "onDestroy"); } public void examples() { Toast.makeText(this, "我是例子examples", Toast.LENGTH_SHORT).show(); } public class MyBinder extends Binder{ public void myExample(){ examples(); } }}activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" ><Button android:id="@+id/but_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开启"/> <Button android:id="@+id/but_stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止"/> <Button android:id="@+id/but_bind" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="绑定"/> <Button android:id="@+id/but_unbind" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="解绑"/> <Button android:id="@+id/but_myExample" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="例子"/> <Button android:id="@+id/but_link" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开启和绑定"/></LinearLayout>
参考地址:http://www.3lian.com/edu/2015/06-06/219880.html
- android四大组件之服务(Service)
- Android四大组件之---Service(服务)详解
- Android四大组件之Service服务
- Android四大组件之Service服务
- Android四大组件之Service(服务)
- Android四大组件之Service(服务)(二)
- Android四大组件之 服务Service
- Android 四大组件学习之 Service 服务
- Android四大组件之Service--前台服务
- Android四大组件之服务(service)
- Android四大核心组件之Service:服务
- Android四大组件之服务--Service
- 四大组件之服务Service
- 四大组件之Service(服务)
- Android四大组件服务(Service)
- Android 四大组件 Service 服务
- Android四大组件Service 服务
- Android 四大组件 Service 服务
- 分词工具介绍与简单实例
- map/multimap容器
- Hi3518EV200平台直接操作GPIO输入或输出高低电平
- turret
- Analysis of notepad process loading
- Android四大组件之服务--Service
- java实现哈夫曼编码
- Qt中LineEdit的文本数字等的读取
- 块状链表---by konnyakuxzy
- ONVIF协议网络摄像机(IPC)客户端程序开发(12):读取音视频流
- 5-18
- LintCode-比较字符串
- Maven创建第一个java项目(官方教程)
- 权限问题