博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
service初级:Activity与service间的联系、重写ServiceConnection
阅读量:6328 次
发布时间:2019-06-22

本文共 3461 字,大约阅读时间需要 11 分钟。

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,如需转载请自行联系原作者
你可能感兴趣的文章
初识DB2 AESE:管理DB2环境的解决方案
查看>>
angular2 错误集。
查看>>
kangle 开发路线图
查看>>
lamp cacti nagios
查看>>
Go 语言net/http 包使用模式:监听多端口等等
查看>>
Android4.2环境搭建
查看>>
14章类型信息-之类型转换前先做检查--之instanceof
查看>>
CentOS 6.5安装Tomcat环境
查看>>
安全基线规范之Cisco核心交换机
查看>>
转 javascript des 加密
查看>>
Play Framework 2.5 整合 MyBatis
查看>>
select&epoll
查看>>
Linux实用命令总结
查看>>
手机流量用完了看看我是怎么办的?(上)
查看>>
关于-如何为虚拟化环境选择合适的存储设备?
查看>>
AWS Device Farm介绍及Appium踩过的坑
查看>>
CAPTCHA技术服务
查看>>
linux subversion 配置与导出
查看>>
CentOS 6.x 更换yum 163源
查看>>
针对市场营销的大数据: 我需要获得实时的仪表盘
查看>>