service初级:Activity与service间的联系、重写ServiceConnection

简介:

MainActivity:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
public  class  MainActivity  extends  Activity
{
     Mybinder mybinder = null ;
     ServiceConnection mConn =  new  ServiceConnection()
     {
         @Override
         public  void  onServiceDisconnected(ComponentName name)
         {
                         
         }
                     
         @Override
         public  void  onServiceConnected(ComponentName name, IBinder binder)
         {
             mybinder = (Mybinder) binder; //对象binder,强转为Mybinder类型
             Log.e( "MainActivity" "mybinder.getname()" );
         }
     };
                 
     @Override
     protected  void  onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
                     
         final  TextView textView1 = (TextView) findViewById(R.id.textView1);
         final  TextView textView2 = (TextView) findViewById(R.id.textView2);
                     
                     
         findViewById(R.id.button1).setOnClickListener( new  OnClickListener()
         {
             @Override
             public  void  onClick(View v)
             {
                 Intent intent =  new  Intent(MainActivity. this ,MyService. class );
                             
                 bindService(intent, mConn, BIND_AUTO_CREATE);
             }
         });
                     
         findViewById(R.id.button2).setOnClickListener( new  OnClickListener()
         {
             @Override
             public  void  onClick(View v)
             {
                 unbindService(mConn);
             }
         });
                     
         findViewById(R.id.button3).setOnClickListener( new  OnClickListener()
         {
             @Override
             public  void  onClick(View v)
             {
                 textView1.setText(mybinder.play()); //通过mybinder调用service的方法,或者通过方法将数据传给service
             }
         });
                     
         findViewById(R.id.button4).setOnClickListener( new  OnClickListener()
         {
             @Override
             public  void  onClick(View v)
             {
                 textView2.setText(mybinder.pause());
             }
         });
     }
                 
     @Override
     public  boolean  onCreateOptionsMenu(Menu menu)
     {
         getMenuInflater().inflate(R.menu.activity_main, menu);
         return  true ;
     }
                 
}


MyService:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public  class  MyService  extends  Service
{
     public  String play()
     {
         return  "播放" ;
     }
     public  String pause()
     {
         return  "暂停" ;
     }
       
     class  Mybinder  extends  Binder //Binder类继承了接口IBinder,Mybinder继承Binder类
     {
         //在Mybinder创建方法
         public  String getname()
         {
             return  "myBinder" ;
         }
           
         //调用外部方法
         public  String play()
         {
             return  MyService. this .play();
         }
         public  String pause()
         {
             return  MyService. this .pause();
         }
     }
       
     private  IBinder binder =  new  Mybinder(); //IBinder声明创建一个Mybinder对象
       
     @Override
     public  IBinder onBind(Intent intent)
     {
         Log.e( "MyService" "onBind" );
         return  binder; //返回IBinder对象
     }
       
     @Override
     public  void  onCreate()
     {
         Log.e( "MyService" "onBind" );
         super .onCreate();
     }
       
     @Override
     public  boolean  onUnbind(Intent intent)
     {
         Log.e( "MyService" "onUnbind" );
         return  super .onUnbind(intent);
     }
       
     @Override
     public  void  onDestroy()
     {
         Log.e( "MyService" "onDestroy" );
         super .onDestroy();
     }
       
}



  1. service属性

android:enabled

这个属性用于指示该服务是否能够被实例化。如果设置为true,则能够被实例化,否则不能被实例化。默认值是true。

<application>元素有它自己的enabled属性,它的这个属性适用于应用中所有的组件,包括service组件。对于被启用的服务,<application>和<service>元素的enabled属性都必须是true(默认值都是true)。如果有一个元素的enabled属性被设置为false,该服务就会被禁用,而不能被实例化。

android:exported

这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互。如果设置为true,则能够被调用或交互,否则不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。

它的默认值依赖与该服务所包含的过滤器。没有过滤器则意味着该服务只能通过指定明确的类名来调用,这样就是说该服务只能在应用程序的内部使用(因为其他外部使用者不会知道该服务的类名),因此这种情况下,这个属性的默认值是false。另一方面,如果至少包含了一个过滤器,则意味着该服务可以给外部的其他应用提供服务,因此默认值是true。

这个属性不是限制把服务暴露给其他应用程序的唯一方法。还可以使用权限来限制能够跟该服务交互的外部实体。





本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1198599,如需转载请自行联系原作者
目录
相关文章
|
10月前
|
Kubernetes 网络协议 Cloud Native
Service 基础
Service 基础
|
API 开发工具 Android开发
Service基础
Service基础
77 0
Service基础
|
Android开发
深入剖析Android四大组件(二)——Service服务之启动与绑定(二)
深入剖析Android四大组件(二)——Service服务之启动与绑定(二)
281 1
深入剖析Android四大组件(二)——Service服务之启动与绑定(二)
|
Android开发
深入剖析Android四大组件(二)——Service服务之启动与绑定(一)
深入剖析Android四大组件(二)——Service服务之启动与绑定(一)
240 0
深入剖析Android四大组件(二)——Service服务之启动与绑定(一)
|
Dubbo Java 应用服务中间件
实现 Application1 调用 Service1 | 学习笔记
快速学习实现 Application1 调用 Service1。
|
Android开发
Android四大组件之一服务(Service)
Service作为Android必不可少的组件,大家有兴趣可以来看看
259 0
|
Android开发
Android四大组件之Service(二)
本篇讲使用bindService方法启动Service
|
Android开发
Android四大组件之Service(一)
Service是Android四大组件之一,它可以在后台执行长时间运行操作而没有用户界面的应用组件。
217 0