普通Service和绑定Service

需要先在Manifest文件中对MyService进行声明:

<service android:name=".MyService" android:enabled="true"></service>

Service代码:

 1 package com.example.dbwater.myapplication;
 2
 3 import android.content.ComponentName;
 4 import android.content.Context;
 5 import android.content.Intent;
 6 import android.content.ServiceConnection;
 7 import android.os.IBinder;
 8 import android.support.v7.app.AppCompatActivity;
 9 import android.os.Bundle;
10 import android.view.View;
11 import android.widget.Toast;
12
13 public class TestService extends AppCompatActivity {
14
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_test_service);
19     }
20     //普通方式启动
21     public void bt1_onClick(View v)
22     {
23         //准备Intent:显式意图
24         Intent intent = new Intent(this,MyService.class);
25         intent.putExtra("test","发送的数据");
26         //启动Service
27         startService(intent);
28         Toast.makeText(TestService.this, "Service已启动", Toast.LENGTH_SHORT).show();
29     }
30     //普通方式关闭
31     public void bt2_onClick(View v)
32     {
33         //准备Intent:显式意图
34         Intent intent = new Intent(this,MyService.class);
35         //关闭Service
36         stopService(intent);
37         Toast.makeText(TestService.this, "Service已停止", Toast.LENGTH_SHORT).show();
38     }
39     ServiceConnection sc;
40     MyService.MyBinder myb;
41     //绑定
42     public void bt3_onClick(View v)
43     {
44         //以绑定方式启动
45         //准备Intent:显式意图
46         Intent intent = new Intent(this,MyService.class);
47         if (sc==null) {
48             sc = new ServiceConnection() {
49                 @Override
50                 public void onServiceConnected(ComponentName name, IBinder service) {
51                     myb = (MyService.MyBinder) service;
52                     Toast.makeText(TestService.this, "绑定启动完成,接收返回的对象" + myb, Toast.LENGTH_SHORT).show();
53                 }
54
55                 @Override
56                 public void onServiceDisconnected(ComponentName name) {
57                     Toast.makeText(TestService.this, "服务连接中断", Toast.LENGTH_SHORT).show();
58                 }
59             };
60         }
61         //三个参数
62         //1-意图
63         //2-服务连接的实现类
64         //3-启动方式,一般用Context.BIND_AUTO_CREATE
65         bindService(intent, sc, Context.BIND_AUTO_CREATE);
66     }
67     //解除绑定
68     public void bt4_onClick(View v)
69     {
70
71         if (sc!=null) {
72             unbindService(sc);
73             sc=null;
74         }
75         else
76         {
77             Toast.makeText(TestService.this, "请先绑定服务", Toast.LENGTH_SHORT).show();
78         }
79     }
80
81 }

MyService代码:

 1 package com.example.dbwater.myapplication;
 2
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.os.Binder;
 6 import android.os.IBinder;
 7 import android.util.Log;
 8
 9 /**
10  * Created by Administrator on 2016/8/9.
11  */
12 public class MyService extends Service {
13     public MyService() {
14         Log.e("TAG","MyService被创建");
15     }
16
17     @Override
18     public void onCreate() {
19         Log.e("TAG","onCreate被调用");
20         super.onCreate();
21     }
22
23     @Override
24     public void onDestroy() {
25         Log.e("TAG","onDestroy被调用");
26         super.onDestroy();
27     }
28
29     @Override
30     public void onRebind(Intent intent) {
31         Log.e("TAG","onRebind被调用");
32         super.onRebind(intent);
33     }
34
35     @Override
36     public boolean onUnbind(Intent intent) {
37         Log.e("TAG","onUnbind被调用");
38         return super.onUnbind(intent);
39     }
40
41     @Override
42     public int onStartCommand(Intent intent, int flags, int startId) {
43         String string = intent.getStringExtra("test");
44         Log.e("TAG","onStartCommand被调用,并收到数据="+string);
45         return super.onStartCommand(intent, flags, startId);
46     }
47
48     public class MyBinder extends Binder
49     {
50         //定义数据交换的方法
51
52     }
53
54     //回调方法
55     //绑定
56     @Override
57     public IBinder onBind(Intent intent) {
58         Log.e("TAG","onBind被调用");
59         // TODO: Return the communication channel to the service.
60
61         //throw new UnsupportedOperationException("Not yet implemented");
62         return new MyBinder();
63     }
64 }

layout代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:paddingBottom="@dimen/activity_vertical_margin"
 7     android:paddingLeft="@dimen/activity_horizontal_margin"
 8     android:paddingRight="@dimen/activity_horizontal_margin"
 9     android:paddingTop="@dimen/activity_vertical_margin"
10     android:orientation="vertical"
11     tools:context="com.example.dbwater.myapplication.TextService">
12
13     <Button
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content"
16         android:text="普通方式启动"
17         android:onClick="bt1_onClick"/>
18     <Button
19         android:layout_width="match_parent"
20         android:layout_height="wrap_content"
21         android:text="普通方式停止"
22         android:onClick="bt2_onClick"/>
23     <Button
24         android:layout_width="match_parent"
25         android:layout_height="wrap_content"
26         android:text="绑定方式启动"
27         android:onClick="bt3_onClick"/>
28     <Button
29         android:layout_width="match_parent"
30         android:layout_height="wrap_content"
31         android:text="解绑方式停止"
32         android:onClick="bt4_onClick"/>
33 </LinearLayout>

				
时间: 2024-12-26 20:24:09

普通Service和绑定Service的相关文章

启动service和绑定service的区别

当我们启动service的时候首先会调用 onCreate():然后调用onStartCommand()方法:再次启动service的时候只会调用onStartCommand()方法:因为只有一个服务! 这时候如果我们返回主界面服务正常运行: 我们绑定service的时候也会调用 onCreate():但是不会调用onStartCommand(): 如果绑定了service我们返回主界面的时候服务会直接抛出异常,并且执行ondestory方法():

跨应用绑定service

绑定service需要在上一讲中,新创建一个AIDL. // AppServiceRemoteBinder.aidl package com.example.yabushan.aidsservice; // Declare any non-default types here with import statements interface AppServiceRemoteBinder { /** * Demonstrates some basic types that you can use

跨进程绑定Service

之前讲过Service有远程服务,也就是不同程序之间也可以通过Service联系起来.跨进程的绑定Service可以通过aidl接口实现. 下面运用一个例子程序 提供Service里的方法和数据的程序叫做服务端,获取和运用Service里的方法和数据的程序叫客户端. 先创建两个安卓程序,一个作为服务端,一个作为客户端. 先对服务端进行操作,在服务端创建一个class类,然后在我的电脑的eclipse的项目存储目录下,找到该class并把后缀名改为 .aidl 然后回到开发程序中刷新一下,就会发现

Android Bound Service(一) ----- Extending Binder Service(进程内绑定Service的简单例子)

ref:http://developer.android.com/guide/components/bound-services.html? 前言 重新学习这一项技术,主要的原因,是因为以前没有好好的学,那时总觉得作品能动,能完成工作就好了,而这种得过且过的想法,大大地影响了我的技术程度,也因此,在这个这个博客里,有许多的复习心得.有幸得到一位前辈的指导,指出,若只是学习,而无实际应用,这样进步会较少,因此,最好要多看源码,并且自己多尝试多实践,这样学习一万小时,应该能有小进步,因此开始了 Bo

Android深入四大组件(三)Service的绑定过程

相关文章 Android深入理解四大组件系列 前言 我们可以通过调用Context的startService来启动Service,也可以通过Context的bindService来绑定Service,建议阅读此篇文章前请阅读Android深入四大组件(二)Service的启动过程这篇文章,知识点重叠的部分,本篇文章将不再赘述. 1.ContextImpl到ActivityManageService的调用过程 我们可以用bindService方法来绑定Service,它的实现在ContextWra

Android Service的绑定过程

通常我们使用Service都要和它通信,当想要与Service通信的时候,那么Service要处于绑定状态的.然后客户端可以拿到一个Binder与服务端进行通信,这个过程是很自然的. 那你真的了解过Service的绑定过程吗?为什么可以是Binder和Service通信? 同样的先看一张图大致了解一下,灰色背景框起来的是同一个类的方法,如下: 我们知道调用Context的bindService方法即可绑定一个Service,而ContextImpl是Context的实现类.那接下来就从源码的角度

android Activity绑定Service

activity可以绑定Service,并且可以调用Service中定义的方法 Service代码:在里面多了一个IBinder;个人理解是用来与Activity绑定的主要通道: public class MainServer extends Service { private final String TAG = "Service------->"; private final IBinder binder = new MyBinder(); //绑定器 public clas

Android基础知识_绑定Service

一.绑定Service的示例 启动服务可以使用startService这种方式启动,同时启动服务我们还可以使用绑定服务的方式来进行启动.如何绑定呢?请阅读以下代码. 示例工程LearnService?MyService.java的代码如下: package com.example.learnservice; import android.app.Service; import android.content.Intent; import android.os.Binder; import and

Service之“绑定”

Service类中和Service绑定有关的回调函数有2个: 1.IBinder onBind(Intent intent); 该方法的返回值会传递给android.content.ServiceConnection.onServiceConnected(ComponentName name, IBinder service),如果该方法返回值为null,则该Service不能被绑定. 2.boolean onUnbind(Intent intent); 在client中可调用的和Service