Git Product home page Git Product logo

hermeseventbus's People

Contributors

harmeetsingh-work avatar xiaofei-it avatar xujinyang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hermeseventbus's Issues

2个问题,咨询一下!一直报GC错误

这两个问题都一直频繁出现(尤其在sony的一台机器上,其他的还好)

版本:compile 'xiaofei.library:hermes-eventbus:0.2.0'

一个process进程,连接主程序,主要post消息 thread ==>(in main thread)
是我的配置问题,还是设备问题?
这两个问题,出现的频率基本上一小时~两小时出现一次

UPDATE:

通常在使用,高德地图或其他软件时发生
另外程序内部,经常报DeadObjectException,所以主程序内部通信采用EventBus发送消息,但是在Activity-create时仍用HermesEventBus-register(这个问题,基本所有的机器都提示,改了之后没有)

问题1:
`
FINGERPRINT=google/razor/flo:4.3/JWR66N/711294:user/dev-keys
HARDWARE=vbox86
UNKNOWN=unknown
RADIO=unknown
BOARD=flo
versionCode=3
PRODUCT=razor
versionName=1.0.0
DISPLAY=JWR66N
USER=Tracker
HOST=vpbs6.mtv.corp.google.com
DEVICE=Tracker
TAGS=test-keys
MODEL=Nexus 11
BOOTLOADER=unknown
CPU_ABI=armeabi-v7a
CPU_ABI2=armeabi
IS_DEBUGGABLE=true
CPU_ABI3=unknown
ID=JWR66N
SERIAL=unknown
MANUFACTURER=asus
BRAND=Google

java.lang.IllegalStateException: An error occurred in the GC.
at android.os.Parcel.readException(Parcel.java:1473)
at android.os.Parcel.readException(Parcel.java:1419)
at xiaofei.library.hermes.internal.IHermesService$Stub$Proxy.gc(IHermesService.java:168)
at xiaofei.library.hermes.internal.Channel.gc(Channel.java:240)
at xiaofei.library.hermes.util.HermesGc.gc(HermesGc.java:92)
at xiaofei.library.hermes.util.HermesGc.register(HermesGc.java:99)
at xiaofei.library.hermes.Hermes.getProxy(Hermes.java:97)
at xiaofei.library.hermes.Hermes.getInstanceWithMethodNameInService(Hermes.java:163)
at xiaofei.library.hermes.Hermes.getInstanceInService(Hermes.java:126)
at xiaofei.library.hermeseventbus.HermesEventBus$HermesListener.onHermesConnected(HermesEventBus.java:287)
at xiaofei.library.hermes.internal.Channel$HermesServiceConnection.onServiceConnected(Channel.java:284)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1110)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1127)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5055)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)`

问题2:

`SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@f3b577b
versionCode=2
BOARD=msm8994
BOOTLOADER=s1
TYPE=user
ID=32.2.A.0.305
BRAND=Sony
TAG=Build
SERIAL=BH9004RC4C
HARDWARE=qcom
SUPPORTED_ABIS=[Ljava.lang.String;@50de998
CPU_ABI=arm64-v8a
RADIO=unknown
IS_DEBUGGABLE=false
MANUFACTURER=Sony
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@a12130a
TAGS=release-keys
CPU_ABI2=
UNKNOWN=unknown
USER=BuildUser
FINGERPRINT=Sony/E6683/E6683:6.0.1/32.2.A.0.305/724807262:user/release-keys
HOST=BuildHost
PRODUCT=E6683
DEVICE=E6683

java.lang.NullPointerException: Attempt to invoke interface method 'void xiaofei.library.hermes.internal.IHermesService.gc(java.util.List)' on a null object reference
at xiaofei.library.hermes.internal.Channel.gc(Channel.java:240)
at xiaofei.library.hermes.util.HermesGc.gc(HermesGc.java:92)
at xiaofei.library.hermes.util.HermesGc.register(HermesGc.java:99)
at xiaofei.library.hermes.Hermes.getProxy(Hermes.java:97)
at xiaofei.library.hermes.Hermes.getInstanceWithMethodNameInService(Hermes.java:163)
at xiaofei.library.hermes.Hermes.getInstanceInService(Hermes.java:126)
at xiaofei.library.hermeseventbus.HermesEventBus$HermesListener.onHermesConnected(HermesEventBus.java:287)
at xiaofei.library.hermes.internal.Channel$HermesServiceConnection.onServiceConnected(Channel.java:284)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1227)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1244)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:234)
at android.app.ActivityThread.main(ActivityThread.java:5526)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)`

最新版本android.os.DeadObjectException

最新版本中在主进程启动service,子进程即使在退出前调用HermesEventBus.getDefault().destroy();然后杀死子进程(Process.killProcess(Process.myPid());)后,再启动子进程,主进程使用HermesEventBus post事件后仍然产生异常:android.os.DeadObjectException,调试发现是主进程持有已经dead的子进程service造成的,可在子进程退出前该怎么处理呢?

Exception: java.lang.NullPointerException: Attempt to invoke interface method 'void xiaofei.library.hermeseventbus.IMainService.register

Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'void xiaofei.library.hermeseventbus.IMainService.register(int, xiaofei.library.hermeseventbus.ISubService)' on a null object reference
at xiaofei.library.hermeseventbus.HermesEventBus$HermesListener.onHermesConnected(HermesEventBus.java:288)
at xiaofei.library.hermes.internal.Channel$HermesServiceConnection.onServiceConnected(Channel.java:284)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1305)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1322)
at android.os.Handler.handleCallback(Handler.java:743)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5546)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

两个App要有相同的包名、类名、方法名?

step 3: (不同app之间通信)
在app间收发的事件类必须有相同的包名、相同的类名和相同的方法? 这样似乎限制太多啦,而且这样还能在同一个手机上装这样两个应用吗?

java.lang.NoClassDefFoundError: xiaofei.library.concurrentutils.util.NonNullCondition

AndroidRuntime: FATAL EXCEPTION: main
Process: com.yishun, PID: 6752
java.lang.NoClassDefFoundError: xiaofei.library.concurrentutils.util.NonNullCondition
at xiaofei.library.concurrentutils.ObjectCanary.(ObjectCanary.java:39)
at xiaofei.library.concurrentutils.ObjectCanary.(ObjectCanary.java:61)
at xiaofei.library.hermeseventbus.HermesEventBus.(HermesEventBus.java:56)
at xiaofei.library.hermeseventbus.HermesEventBus.getDefault(HermesEventBus.java:63)
at com.yishun.manager.CMCCApplication.onCreate(CMCCApplication.java:421)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4438)
at android.app.ActivityThread.access$1500(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5111)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
楼主,报这个错误,怎么搞???

我看了源码是用service做的,但是和直接用broadCast来做相比似乎速度没有什么提升

以下是我的测试数据,每次事件中带有1K bytes的数据,耗时取的是1000次事件的平均值:
机型 broadcast耗时 Hermes耗时
Nexus6 11.83ms 7.79ms
LG D858 9.21ms 11.6ms
小米note 5.08ms 10.77ms
oppo A31 28.66ms 13.4ms

我看你是在发送事件事件时每次都做了锁和解锁,感觉可能是这里产生了耗时。但service bind成功之后已经是同步接口了,感觉多线程的情况才需要做锁或者synchronized。
请问基于什么考虑做锁呢?

为什么这边会报服务未绑定的错误

java.lang.IllegalStateException: Service Unavailable: You have not connected the service or the connection is not completed. You can set HermesListener to receive a callback when the connection is completed.
at xiaofei.library.hermes.Hermes.checkBound(Hermes.java:87)
at xiaofei.library.hermes.Hermes.getInstanceWithMethodNameInService(Hermes.java:139)
at xiaofei.library.hermes.Hermes.getInstanceInService(Hermes.java:126)
at xiaofei.library.hermes.Hermes.getInstance(Hermes.java:130)
at com.yztc.itemcollect2.module.hermes.HermesActivity.onViewClicked(HermesActivity.java:50)
at com.yztc.itemcollect2.module.hermes.HermesActivity_ViewBinding$3.doClick(HermesActivity_ViewBinding.java:59)
at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
at android.view.View.performClick(View.java:5207)
at android.view.View$PerformClick.run(View.java:21177)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:163)

和Hermes混用时,HermesEventBus 崩溃

FATAL EXCEPTION: main
Process: com.lewis.sample:DB, PID: 22211
java.lang.NullPointerException: Attempt to invoke interface method 'void xiaofei.library.hermeseventbus.IMainService.register(int, xiaofei.library.hermeseventbus.ISubService)' on a null object reference
at xiaofei.library.hermeseventbus.HermesEventBus$HermesListener.onHermesConnected(HermesEventBus.java:291)
at xiaofei.library.hermes.internal.Channel$HermesServiceConnection.onServiceConnected(Channel.java:288)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1329)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1346)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:179)
at android.app.ActivityThread.main(ActivityThread.java:5739)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)

适配新版本support库

android.support.v7.app.ActionBarActivity类从support库v26.0.2中删除了
导致错误:

java.lang.NoClassDefFoundError: android.support.v7.app.ActionBarActivity
                                                                                   at xiaofei.library.hermes.util.TypeUtils$1.<init>(TypeUtils.java:51)
                                                                                   at xiaofei.library.hermes.util.TypeUtils.<clinit>(TypeUtils.java:48)
                                                                                   at xiaofei.library.hermes.util.TypeCenter.register(TypeCenter.java:94)
                                                                                   at xiaofei.library.hermes.Hermes.register(Hermes.java:71)
                                                                                   at xiaofei.library.hermeseventbus.HermesEventBus.init(HermesEventBus.java:122)

java.lang.NullPointerException at xiaofei.library.hermeseventbus.HermesEventBus$HermesListener.onHermesConnected(HermesEventBus.java) at xiaofei.library.hermes.internal.Channel$HermesServiceConnection.onServiceConnected(Channel.java)

java.lang.NullPointerException
at xiaofei.library.hermeseventbus.HermesEventBus$HermesListener.onHermesConnected(HermesEventBus.java)
at xiaofei.library.hermes.internal.Channel$HermesServiceConnection.onServiceConnected(Channel.java)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1106)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1123)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(NativeStart.java)

感觉HermesEventBus没有完全实现粘性特征

个人感觉HermesEventBus没有完全实现粘性特征,HermesEventBus必须在register之后才能进行事件的收发;而EventBus先发送粘性事件,后进行注册依然能收到。估计这可能是评论区中说收不到事件的主要原因,HermesEventBus和EventBus还是有一些区别的。

多个APP间通讯的问题

在多个APP之间通讯的时候,在子 APP 中Application调用connect主APP,然后调用post,主APP不能收到该Event,还有主APP如何把事件post给子APP因为主APP是调用init方法的默认使用的EventBus的post了,也就是默认当前进程post,而子app是默认给主APP post想给自己post也没提供方法,我是没用起来

请教个问题

接入hermes-eventbus:0.2.0,在debug模式下安装运行都没有问题,但是正是发布打包安装就报
MainActivity及其超类没有公共方法@subscribe注释但实际上都按照dome上的使用方式
/***
* 订阅 退出登录
*/
@subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(String type){
switch (type){
case "LOGIN_OUT":
logindb=DBHelper.getInstance(getApplicationContext())
.getLogin();
break;
}
}

错误信息如下:
12-05 14:00:20.296 9135 9135 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.baima/com.example.baima.MainActivity}: org.greenrobot.eventbus.EventBusException: Subscriber class com.example.baima.MainActivity and its super classes have no public methods with the @subscribe annotation
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2479)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2539)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at android.app.ActivityThread.access$900(ActivityThread.java:168)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1378)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at android.os.Looper.loop(Looper.java:150)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5665)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:689)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: Caused by: org.greenrobot.eventbus.EventBusException: Subscriber class com.example.baima.MainActivity and its super classes have no public methods with the @subscribe annotation
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at org.greenrobot.eventbus.o.a(Unknown Source)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at org.greenrobot.eventbus.c.a(Unknown Source)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at xiaofei.library.hermeseventbus.HermesEventBus.a(Unknown Source)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at com.example.baima.MainActivity.onCreate(Unknown Source)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:6372)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2432)
12-05 14:00:20.296 9135 9135 E AndroidRuntime: ... 9 more
12-05 14:00:20.297 1008 1460 W ActivityManager: Force finishing activity com.example.baima/.MainActivity

Crash Inside HermesEventBus.getDefault().init(this)

We are calling this api from application class onCreate() method. But HermesEventBus.getDefault().init(this) : api is failing with below stack trace -

Caused by java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
xiaofei.library.hermeseventbus.HermesEventBus.getCurrentProcessName (HermesEventBus.java:109)
xiaofei.library.hermeseventbus.HermesEventBus.isMainProcess (HermesEventBus.java:101)
xiaofei.library.hermeseventbus.HermesEventBus.init (HermesEventBus.java:119)

This crash does not happen always, we got to know about this crash through Firebase crash reporting.

Error occurs but does not crash the app.

只要发送消息就会报错,但是消息都能收到

01-12 16:07:27.123 12739-12761/xiaofei.library.hermeseventbustest E/HERMES_CALLBACK: Error occurs but does not crash the app.
android.os.DeadObjectException
at android.os.BinderProxy.transact(Native Method)
at xiaofei.library.hermes.internal.IHermesServiceCallback$Stub$Proxy.callback(IHermesServiceCallback.java:122)
at xiaofei.library.hermes.internal.HermesCallbackInvocationHandler.invoke(HermesCallbackInvocationHandler.java:57)
at java.lang.reflect.Proxy.invoke(Proxy.java:379)
at xiaofei.library.hermeseventbus.ISubService.post(ISubService.java)
at xiaofei.library.hermeseventbus.MainService.post(MainService.java:81)
at java.lang.reflect.Method.invoke(Native Method)
at xiaofei.library.hermes.receiver.ObjectReceiver.invokeMethod(ObjectReceiver.java:57)
at xiaofei.library.hermes.receiver.Receiver.action(Receiver.java:125)
at xiaofei.library.hermes.HermesService$1.send(HermesService.java:54)
at xiaofei.library.hermes.internal.IHermesService$Stub.onTransact(IHermesService.java:70)
at android.os.Binder.execTransact(Binder.java:404)

在注册时报错

HermesEventBus.getDefault().register(this);

org.greenrobot.eventbus.EventBusException: Subscriber class com.jwar.monitor.MainActivity and its super classes have no public methods with the @subscribe annotation

依赖了过时的Activity

java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/app/ActionBarActivity;
at xiaofei.library.hermes.util.TypeUtils$1.(TypeUtils.java:51)
at xiaofei.library.hermes.util.TypeUtils.(TypeUtils.java:48)
at xiaofei.library.hermes.util.TypeCenter.register(TypeCenter.java:94)
at xiaofei.library.hermes.Hermes.register(Hermes.java:71)
at xiaofei.library.hermeseventbus.HermesEventBus.init(HermesEventBus.java:122)

HERMES_CALLBACK Error occurs but does not crash the app.

2019-05-16 14:19:46.273 13679-13679/com.xxx.xxx E/HERMES_CALLBACK: Error occurs but does not crash the app.
android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:1147)
at xiaofei.library.hermes.internal.IHermesServiceCallback$Stub$Proxy.callback(IHermesServiceCallback.java:122)
at xiaofei.library.hermes.internal.HermesCallbackInvocationHandler.invoke(HermesCallbackInvocationHandler.java:57)
at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
at $Proxy6.post(Unknown Source)
at xiaofei.library.hermeseventbus.MainService.post(MainService.java:81)
at xiaofei.library.hermeseventbus.HermesEventBus$3.call(HermesEventBus.java:209)
at xiaofei.library.hermeseventbus.HermesEventBus$3.call(HermesEventBus.java:206)
at xiaofei.library.hermeseventbus.HermesEventBus.actionInternal(HermesEventBus.java:172)
at xiaofei.library.hermeseventbus.HermesEventBus.post(HermesEventBus.java:206)
at xxx.xxxAccountManager$6.onNext(AccountManager.java:584)
at xxx.xxx.AccountManager$6.onNext(AccountManager.java:574)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)
at io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)
at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onNext(ObservableCreate.java:67)
at xxx.xxx.network.base.BaseService$4.subscribe(BaseService.java:135)
at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:200)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)
at android.os.Handler.handleCallback(Handler.java:891)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:7470)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

手动杀死进程时会报NullPointerException

java.lang.NullPointerException: Attempt to invoke virtual method 'void xiaofei.library.concurrentutils.ObjectCanary.set(java.lang.Object)' on a null object reference
at xiaofei.library.hermeseventbus.HermesEventBus$1.onHermesConnected(HermesEventBus.java:98)
atxiaofei.library.hermes.internal.Channel$HermesServiceConnection.onServiceConnected(Channel.java:283)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1305)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1322)
at android.os.Handler.handleCallback(Handler.java:743)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5546)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

主app和子app之间的通信,主app不能接收子app事件

我在主app里面写的eventbus接收事件,但是子app发过来主app收不到,或者子app就没有发送成功。
主app的接收事件处理
@subscribe(threadMode = ThreadMode.MAIN)
public void helloEventBus(MessageEvent message) {
text_info.setText(message.name);
System.out.println("传递过来的数据:--->>>"+message.name);
}
子app的发送事件
HermesEventBus.getDefault().post(new MessageEvent("tom","123456"));

事件类都是相同的包名,相同的类名,里面结构体都一样。
package com.cn.wt.eventbus;

/**

  • Created by caitong on 16/12/13.
    */
    public class MessageEvent {
    public final String name;
    public final String password;
    public MessageEvent(String name,String password) {
    this.name = name;
    this.password=password;
    System.out.println("我进来发送消息了");
    }
    }

Crash report java.lang.NullPointerException at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5364)

Below are logs. I've seen this issue on Android app when performing stress test.

Caused by java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference xiaofei.library.hermeseventbus.HermesEventBus.getCurrentProcessName (HermesEventBus.java:109) xiaofei.library.hermeseventbus.HermesEventBus.isMainProcess (HermesEventBus.java:101) xiaofei.library.hermeseventbus.HermesEventBus.init (HermesEventBus.java:119) com.google.atap.jacquard.application.JacquardApplication.onCreate (JacquardApplication.java:850) android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1024) android.app.ActivityThread.handleBindApplication (ActivityThread.java:5361) android.app.ActivityThread.-wrap2 (ActivityThread.java) android.app.ActivityThread$H.handleMessage (ActivityThread.java:1528) android.os.Handler.dispatchMessage (Handler.java:102) android.os.Looper.loop (Looper.java:154) android.app.ActivityThread.main (ActivityThread.java:6077) java.lang.reflect.Method.invoke (Method.java) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:865) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:755)

可以在依赖项目之间通信吗

我项目还依赖了其他的项目,可以在主项目与依赖项目之间通信吗?也可以说是模块之间通信,需要怎么做呢?感谢大神可以帮忙解答

Android oreo Action bar Activity not found

Hello Team,

Recently i have updated my application to support android oreo , And we have changed support version to 26 and compile sdk version to 26.

At runtime we land up with issue from HermsEventBus , i.e ActionBarActivity def not found in TypeUtills.java

private static final HashSet<Class> CONTEXT_CLASSES = new HashSet>() {
{
add(Context.class);
add(ActionBarActivity.class);
add(Activity.class);
add(AppCompatActivity.class);
add(Application.class);
add(FragmentActivity.class);
add(IntentService.class);
add(Service.class);
}
};

Please let us know how to solve this problem , it seems they have removed ActionBarActivity from support libraries ,Previously it was deprecated.

Regards,
Anil Raavi.

Manifest merger failed

请问库里面的 values.xml 中的 app_name 是否可以移除?会导致 manifest merger failed 。

android.os.DeadObjectException

使用hermesEventBus 框架,post 方法参数是string类型的不报错,但是使用了自定义的对象,报如下错误

01-12 16:07:27.103 12739-12761/xiaofei.library.hermeseventbustest E/HERMES_CALLBACK: Error occurs but does not crash the app.
android.os.DeadObjectException
at android.os.BinderProxy.transact(Native Method)
at xiaofei.library.hermes.internal.IHermesServiceCallback$Stub$Proxy.callback(IHermesServiceCallback.java:122)
at xiaofei.library.hermes.internal.HermesCallbackInvocationHandler.invoke(HermesCallbackInvocationHandler.java:57)
at java.lang.reflect.Proxy.invoke(Proxy.java:379)
at xiaofei.library.hermeseventbus.ISubService.post(ISubService.java)
at xiaofei.library.hermeseventbus.MainService.post(MainService.java:81)
at java.lang.reflect.Method.invoke(Native Method)
at xiaofei.library.hermes.receiver.ObjectReceiver.invokeMethod(ObjectReceiver.java:57)
at xiaofei.library.hermes.receiver.Receiver.action(Receiver.java:125)
at xiaofei.library.hermes.HermesService$1.send(HermesService.java:54)
at xiaofei.library.hermes.internal.IHermesService$Stub.onTransact(IHermesService.java:70)
at android.os.Binder.execTransact(Binder.java:404)

java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference

java.lang.RuntimeException: Unable to create application com.stub.StubApp: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5677)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
at xiaofei.library.hermeseventbus.HermesEventBus.b(SourceFile)
at xiaofei.library.hermeseventbus.HermesEventBus.a(SourceFile)
at xiaofei.library.hermeseventbus.HermesEventBus.init(SourceFile)
at com.****.Application.onCreate(SourceFile)
at com.stub.StubApp.onCreate(SourceFile:111)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1028)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5658)
... 8 more
java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
at xiaofei.library.hermeseventbus.HermesEventBus.b(SourceFile)
at xiaofei.library.hermeseventbus.HermesEventBus.a(SourceFile)
at xiaofei.library.hermeseventbus.HermesEventBus.init(SourceFile)
at com.
.****Application.onCreate(SourceFile)
at com.stub.StubApp.onCreate(SourceFile:111)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1028)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5658)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)

打包后清单文件会多出一些权限跟组件的申明

我在使用HermesEventBus的时候,当我打包之后自己反编译发现清单文件中多了许多权限的增加,还有一个HermesEventBus$Service的申明 ,这个原因直接导致在腾讯手机管家上面报毒了~可能申请了敏感的权限,我从多出的权限推测可能是SYSTEM_ALERT_WINDOW这个原因

android.os.DeadObjectException

android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:496)
at xiaofei.library.hermes.internal.IHermesServiceCallback$Stub$Proxy.callback(IHermesServiceCallback.java:122)
at xiaofei.library.hermes.internal.HermesCallbackInvocationHandler.invoke(HermesCallbackInvocationHandler.java:57)
at java.lang.reflect.Proxy.invoke(Proxy.java:397)
at $Proxy6.post(Unknown Source)
at xiaofei.library.hermeseventbus.MainService.post(MainService.java:81)
at xiaofei.library.hermeseventbus.HermesEventBus$3.call(HermesEventBus.java:195)
at xiaofei.library.hermeseventbus.HermesEventBus$3.call(HermesEventBus.java:192)
at xiaofei.library.hermeseventbus.HermesEventBus.actionInternal(HermesEventBus.java:158)
at xiaofei.library.hermeseventbus.HermesEventBus.post(HermesEventBus.java:192)

Fatal Exception: java.lang.IllegalStateException An error occurred in the GC.

Fatal Exception: java.lang.IllegalStateException: An error occurred in the GC.
at android.os.Parcel.readException(Parcel.java:1476)
at android.os.Parcel.readException(Parcel.java:1422)
at xiaofei.library.hermes.internal.IHermesService$Stub$Proxy.gc(IHermesService.java:168)
at xiaofei.library.hermes.internal.Channel.gc(Channel.java:240)
at xiaofei.library.hermes.util.HermesGc.gc(HermesGc.java:92)
at xiaofei.library.hermes.util.HermesGc.register(HermesGc.java:99)
at xiaofei.library.hermes.Hermes.getProxy(Hermes.java:97)
at xiaofei.library.hermes.Hermes.getInstanceWithMethodNameInService(Hermes.java:163)
at xiaofei.library.hermes.Hermes.getInstanceInService(Hermes.java:126)
at xiaofei.library.hermeseventbus.HermesEventBus$HermesListener.onHermesConnected(HermesEventBus.java:287)
at xiaofei.library.hermes.internal.Channel$HermesServiceConnection.onServiceConnected(Channel.java:284)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1151)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1168)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5333)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:711)
at dalvik.system.NativeStart.main(NativeStart.java)

APP中添加了一个独立进程 Service,按返回关闭APP主界面后,再打开无法连接Service发出的事件

APP中添加了一个 Service,并在mainfest中配置service为android:process=":TestService"。从service中POST事件,主界面可以正常收到消息。按返回键退出主界面后,再次打开无法收到消息。
想了一下,可能init是在主APP的application中初始化的不行,尝试在application中初始化,没有效果。
看init源码如下:
public void init(Context context) {
mContext = context.getApplicationContext();
mMainProcess = isMainProcess(context.getApplicationContext());
if (mMainProcess) {
Hermes.init(context);
Hermes.register(MainService.class);
mMainApis = MainService.getInstance();
} else {
mState = STATE_CONNECTING;
Hermes.setHermesListener(new HermesListener());
Hermes.connect(context, Service.class);
Hermes.register(SubService.class);
}
}
在Service中执行init时,mMmainProcess为false,也就是永远不能从服务来执行初始化,可是现实确是往往service的生命周期都比前台进程要长。
作者能不能指点一下,如何解决这个问题。

Crash

when you go inside of activity manager #getRunningAppProcesses can also return null, In such case following exception happens.Please have a look

Ref Links to solve the issue :
ACRA/acra#427
https://stackoverflow.com/questions/19631894/is-there-a-way-to-get-current-process-name-in-android/21389402#21389402

java.lang.RuntimeException: Unable to create application com.google.atap.jacquard.application.JacquardApplication: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5364)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1528)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
at xiaofei.library.hermeseventbus.HermesEventBus.getCurrentProcessName(HermesEventBus.java:109)
at xiaofei.library.hermeseventbus.HermesEventBus.isMainProcess(HermesEventBus.java:101)
at xiaofei.library.hermeseventbus.HermesEventBus.init(HermesEventBus.java:119)
at com.google.atap.jacquard.application.JacquardApplication.onCreate(JacquardApplication.java:816)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5361)
... 8 more

Suggestion: D/EventBus: No subscribers registered for event message

When using HermesEventBus, these two debug messages could also include the process ID, as in android.os.Process.myPid()

D/EventBus: No subscribers registered for event class com.testapp..EventTest
D/EventBus: No subscribers registered for event class org.greenrobot.eventbus.NoSubscriberEvent

This would make it more clear that it's HermesEventBus and when there are multiple processes, why this message appears even when delivered.

我提几个建议

  1. EventBus不太适合用Hermes,因为EventBus只调用方法不需要返回值以及等待返回,aidl声明有个oneway关键字,执行aidl方法时候是不阻塞调用

  2. 绑定服务的时机,关于作者开一个服务,多个进程同时去通过aidl绑定这个服务发布事件这点非常好,但是绑定服务不应该是在init时候,而是在子进程发布事件,子进程注册事件的时候判断有没有绑定服务,没有连接就去绑定

  3. 发布事件,目前是发布一个跨进程的事件所有进程都接收,我觉得没有必要所有进程接收,post远程事件的时候多个processName的参数,发布事件到指定的进程。

  4. EventBus用多了就乱,我觉得以接口的方式定义event,接收者实现这个接口,发布者通过这个接口发布事件,目前我实现了两种方式一种是动态代理自动实现使用者定义的接口,一种是apt的方式自动那个实现使用者定义的接口。

以上是个人建议,总的来说开一个服务,多个进程同时去通过aidl绑定这个服务发布事件这点想法很好

对象序列化问题

主进程间互相传递对象,没问题,主进程给其它进程post对象,会被解析成LinkedTreeMap

子进程收不到事件

在一个应用里面,子进程(Service)发出的事件,主进程收得到,但是主进程发出的事件,子进程收不到。

java.lang.NullPointerException

接入后,一直在报NullPointerException
1.xiaofei.library.hermeseventbus.HermesEventBus$HermesListener.void onHermesConnected(java.lang.Class)(SourceFile:291)
xiaofei.library.hermes.internal.Channel$HermesServiceConnection.void onServiceConnected(android.content.ComponentName,android.os.IBinder)(SourceFile:288)
2.Attempt to invoke interface method 'void xiaofei.library.hermeseventbus.a.a(int, xiaofei.library.hermeseventbus.b)' on a null object reference

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.