同一个service如何调用service本身
导读:本文共4194字符,通常情况下阅读需要14分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 同一个service调用service本身如果同一个service调用service本身的方法,出现了事务不能控制。解决方案1.在spring配置文件中配置<!--expose-proxyservice调用aop实现自身调用自身方法--><aop:aspectj-autoproxyproxy-target-class="true&q... ...
目录
(为您整理了一些要点),点击可以直达。如果同一个service调用service本身的方法,出现了事务不能控制。
1.在spring配置文件中配置
2.在service中用 AopContext.currentProxy() 方法调用
例如调用myService的mySave方法:
生命周期如下:
onCreate()–> onStartCommand() —> onDestory();
如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStartCommand()。服务停止的时候调用onDestory()。服务只会被停止一次。
下面是一个电话窃听器的实例:
在Manifest文件中配置必要的权限和组件。设置一个监听开机的广播接收者。
BootReceiver.java
监听开机事件。
SystemService.java
两个Service类中的一个。两个类采用循环调用机制,当其中一个Service被destroy时,系统调用另一个Service。这样起到了防止用户关闭的流氓效果。
MainActivity.java
控制Service的开启和关闭。
用绑定方式开启的Service,其生命周期为:onCreate() —>onBind();—>onunbind()–>onDestory(); 没有onStartCommand。
步骤:
1. 服务要暴露方法,必须在Service中定义一个内部类——中间人MiddlePerson,实现定义好的接口中的方法(callMethodInService,用于调用Service中的某方法)。
2. 实现服务成功绑定的代码(onBind方法),返回一个中间人new MiddlePerson()。
3. 在Activity中的bind()方法中采用bindService方法开启服务。
4. 当服务被连接或失去连接时,分别实现ServiceConnection接口中的onServiceConnected()和onServiceDisconnected()方法。
5. 最后就可以通过中间人调用服务里面的方法了。
MainActivity.java
start
方式开启服务,一旦服务开启,就和调用者(Activity)没有任何关系了。开启者退出后,如果开启者挂掉,服务还在后台长期的运行。而且开启者没有办法去调用服务里面的方法。
bind
方式开启服务,一旦调用者挂掉,服务也会跟着挂掉。不求同时生,但求同时死。而且开启者可以调用服务里面的方法。
同一个service如何调用service本身的详细内容,希望对您有所帮助,信息来源于网络。