技术标签: bindService Android
frameworks/base/core/java/android/content/ContextWrapper.java
public boolean bindService(Intent service, ServiceConnection conn,
int flags) {
return mBase.bindService(service, conn, flags);
}
private boolean bindServiceCommon(Intent service, ServiceConnection conn, int flags,...
IBinder token = getActivityToken();
if (token == null && (flags&BIND_AUTO_CREATE) == 0 && mPackageInfo != null
&& mPackageInfo.getApplicationInfo().targetSdkVersion
< android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
flags |= BIND_WAIVE_PRIORITY;
}
service.prepareToLeaveProcess(this);
int res = ActivityManager.getService().bindIsolatedService(
mMainThread.getApplicationThread(), getActivityToken(), service,
service.resolveTypeIfNeeded(getContentResolver()),
sd, flags, instanceName, getOpPackageName(), user.getIdentifier());
/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
public int bindIsolatedService(IApplicationThread caller, IBinder token, Intent service,...
return mServices.bindServiceLocked(caller, token, service,
resolvedType, connection, flags, instanceName, callingPackage, userId);
/frameworks/base/services/core/java/com/android/server/am/ActiveServices.java
int bindServiceLocked(IApplicationThread caller, IBinder token, Intent service,...
//启动service
bringUpServiceLocked(serviceRecord,...
final Intent intent = new Intent(Intent.ACTION_REVIEW_PERMISSIONS);
mAm.mContext.startActivityAsUser(intent, new UserHandle(userId));
c.conn.connected(s.name, b.intent.binder, false);
requestServiceBindingLocked(s, b.intent, callerFg, false); //第一次绑定
private final boolean requestServiceBindingLocked(ServiceRecord r, IntentBindRecord i,...
r.app.thread.scheduleBindService(r, i.intent.getIntent(), rebind,...
/frameworks/base/core/java/android/app/ActivityThread.java
sendMessage(H.BIND_SERVICE, s)
public void handleMessage(Message msg) {
case BIND_SERVICE:
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "serviceBind");
handleBindService((BindServiceData)msg.obj);
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
private void handleBindService(BindServiceData data) {
Service s = mServices.get(data.token);
if (DEBUG_SERVICE)
Slog.v(TAG, "handleBindService s=" + s + " rebind=" + data.rebind);
if (s != null) {
try {
data.intent.setExtrasClassLoader(s.getClassLoader());
data.intent.prepareToEnterProcess();
try {
if (!data.rebind) {
IBinder binder = s.onBind(data.intent);
ActivityManager.getService().publishService(
data.token, data.intent, binder);
} else {
s.onRebind(data.intent);
ActivityManager.getService().serviceDoneExecuting(
data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0);
}
/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
public void publishService(IBinder token, Intent intent, IBinder service) {
mServices.publishServiceLocked((ServiceRecord)token, intent, service);
/frameworks/base/services/core/java/com/android/server/am/ActiveServices.java
void publishServiceLocked(ServiceRecord r, Intent intent, IBinder service)
c.conn.connected(r.name, service, false);
/frameworks/base/core/java/android/app/IServiceConnection.aidl
oneway interface IServiceConnection {
@UnsupportedAppUsage
void connected(in ComponentName name, IBinder service, boolean dead);
}
/frameworks/base/core/java/android/app/LoadedApk.java
static final class ServiceDispatcher {
private final ServiceDispatcher.InnerConnection mIServiceConnection;
@UnsupportedAppUsage
private final ServiceConnection mConnection;
public void connected(ComponentName name, IBinder service, boolean dead)
throws RemoteException {
LoadedApk.ServiceDispatcher sd = mDispatcher.get();
if (sd != null) {
sd.connected(name, service, dead);
}
}
}
public void connected(ComponentName name, IBinder service, boolean dead) {
if (mActivityExecutor != null) {
mActivityExecutor.execute(new RunConnection(name, service, 0, dead));
} else if (mActivityThread != null) {
mActivityThread.post(new RunConnection(name, service, 0, dead));
} else {
doConnected(name, service, dead);
}
}
public void doConnected(ComponentName name, IBinder service, boolean dead) {
// If there is a new viable service, it is now connected.
if (service != null) {
mConnection.onServiceConnected(name, service);
} else {
// The binding machinery worked, but the remote returned null from onBind().
mConnection.onNullBinding(name);
}
}
startService bindService区别
startService
onCreate onStartCommand
多次调用startService,onCreate仅一次,onStartCommand多次
stopService
onDestroy
bindService
onCreate onBind
多次调用bindService, onCreate onBind仅一次
unBindService
onUnbind
参考
https://blog.csdn.net/qq_23452385/article/details/125867400
(4) Android中Binder调用流程 --- bindService的Binder流程介绍_会说话的小鱼的博客-程序员宅基地
文章浏览阅读971次,点赞3次,收藏16次。配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则(针对某个服务的负载均衡策略)user-service: # 给某个微服务配置负载均衡规则,这里是user-service服务ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则1. Feign可以支持很多的自定义配置。_springcloud + ribbitmq + docker + rebis
文章浏览阅读7.1k次。当统计一个数据集里数据出现的频率,次数可以使用value_countvalue_counts默认参数如下:value_counts(values, sort=True, ascending=False, normalize=False, bins=None, dropna=True)对于Series类型的数据data.value_counts()对于DataFrame类型的数据dat..._pandas count_value
文章浏览阅读1.5w次,点赞11次,收藏94次。分类分类(Classification)任务就是通过学习获得一个目标函数(Target Function)f, 将每个属性集x映射到一个预先定义好的类标号y。分类任务的输入数据是记录的集合,每条记录也称为实例或者样例。用元组(X,y)表示,其中,X 是属性集合,y是一个特殊的属性,指出样例的类标号(也称为分类属性或者目标属性)。解决分类问题的一般方法分类技术是一种根据输入数据集建立分类模型..._id3算法的数据包是哪个rpart
文章浏览阅读64次。此文转载自:https://blog.csdn.net/weixin_51622156/article/details/112528435文章目录安装Nginx服务1、关闭防火墙将nginx所需软件包到/opt目录下2、安装依赖包3、 创建运行用户4、编译安装5.优化路径6、添加 Nginx 系统服务二、安装 MySQL 服务1、安装Mysql环境依赖包2、创建运行用户...
文章浏览阅读1.1k次。本题要求实现一个函数,用下列公式求cos(x)近似值,精确到最后一项的绝对值小于eps(绝对值小于eps的项不要加):cos(x)=0!x0−2!x2+4!x4−6!x6+...函数接口定义:funcos(eps,x),其中用户传入的参数为eps和x;函数funcos应返回用给定公式计算出来,保留小数4位。输出样例:代码长度限制16 KB时间限制400 ms内存限制..._使用函数求余弦函数的近似值
文章浏览阅读431次。一、hash_set1、hash_set以hashtable为底层机制,hash_set的操作几乎都是转调用hashtable的函数而已。2、hash_set的元素没有自动排序功能。3、hash_set的使用方式与set完全相同。4、测试例子 #include #include using namespace std;_stl源码hash_set
文章浏览阅读3.2w次。这里以Label为例说明。在Form1的加载加载中:private void Form1_Load(object sender, EventArgs e){Label label1=new Label(){Text=“欢迎来到这里!!!”,ForeColor = System.Drawing.Color.Red,Name=”label1”,AutoSize=true,Location=new System.Drawing.Point(48, 37);};this.Controls.A_.net 怎么将自定义控件放到form中
文章浏览阅读5.3w次,点赞39次,收藏79次。Endnote使用——与WPS关联1. 自动关联2. 手动关联我使用的是Endnote X8汉化版,在经历过反复重新安装包括关机重启之后,Endnote X8也没有自动和WPS关联,上网百度了很多办法,都没有用……过了很久,我终于弄好了。现记录一下过程。1. 自动关联我们需要下载安装最新版的WPS Office 2019,以及安装EndNote到电脑本地。这个时候,打开WPS文档,会发现菜单栏里已经有了EndNote X8的标识,说明软件已自动关联了。2. 手动关联如果软件下载或重新安装之后,未_endnotex8与wps
文章浏览阅读7.7k次。1 wifi换成有线,因为息屏后WiFi就会自动断开2 设置修改,点亮唤醒网络不勾选,进入休眠不勾选3 目前测试用向日葵,远程这台电脑,再屏幕保护程序运行的情况下,可以远程控制。转载于:https://www.cnblogs.com/QuestionsZhang/p/11606815.html..._mac 休眠但是连得上
文章浏览阅读156次。springboot基于Android平台的智能短途旅游规划APP。springboot基于微信小程序的中学历史学习系统。springboot图书馆自习室管理系统的设计与实现。springboot基于java的校园疫情管理系统。jsp基于MVVM的人力资源管理系统的设计与实现。ssm微信小程序的应急救护知识推荐的设计与实现。springboot基于Vue的寻人启事平台。ssm基于Android的体育场地的预订平台。ssm基于SSM的资产管理平台的设计与实现。springboot基于人流监控的景区系统。_校园课表小程序 csdn
文章浏览阅读370次。Mybatis拦截器介绍及分页插件1.1 目录1.1 目录1.2 前言1.3 Interceptor接口1.4 注册拦截器1.5 Mybatis可拦截的方法1.6 利用拦截器进行分页1.2 前言 拦截器的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻_分页拦截器什么时候触发
文章浏览阅读3.7k次,点赞6次,收藏36次。为了进行ADS-B报文防欺骗技术研究,首先需要深入了解报文的编译码方法:译码的实现可以深度挖掘报文中的特征参数,进行防欺骗研究;编码的实现可以为后续仿真实验产生符合要求的报文打下基础。_ads-b