2017-08-01 12 views
0

UIフラグメントとバックグラウンドサービスの間に相互作用があります。 私はEventBusを使用しています。 もちろん、アクティビティが停止/強制終了された場合、サブスクライバは存在しません。UIフラグメント<-> EventBus <->サービス

public class LocationService extends Service { 
    //... 
    EventBus.getDefault().post(new MessageEventLocationClient(data)); 
} 


public class ClientFragment extends Fragment { 
    //... 
    @Subscribe(threadMode = ThreadMode.MAIN) 
    public void onMessageEvent(MessageEventLocationClient event) { 
     // update UI 
     textViewLastSentData.setText(event.trackData.lastLatLon()); 
    } 
} 

そして、すべてOK:

は、ここであなたが理解してコードです。

Devices with errors 14: 
Google Nexus 7 (flo) - Android 5.0 
Google Nexus 9 (flounder) - Android 5.0 
Google Pixel (sailfish) - Android 7.1 
Motorola XT1096 (victara) - Android 4.4 
... 


Exceptions: 
java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.tim4dev.imokhere/com.tim4dev.imokhere.MainActivity}: org.a.a.e: 
Subscriber class com.tim4dev.imokhere.c and its super 
classes have no public methods with the @Subscribe annotation 
... 

それが何を意味する:

しかし、ここでのGoogle Playデベロッパーコンソールから私に送られたレポートがありますか?

これは本当に問題ですか?

それではどうしますか?

同様の問題はdescribed hereです。

UPDRTM。ありがとうございます。

+2

、これはすべての時間に発生した場合は、おそらくProGuardのは、 ')(' onMessageEventを削除しています。 – CommonsWare

答えて

1

と指摘されているように、Proguardに@Subscribeで注釈を付けたメソッドを削除しないように指示する必要があります。 Proguardは未使用の場合は削除し、EventBusは反映された状態でそれらを検索するので、未使用になる可能性が非常に高くなります。あなたはhereから、あなたのProGuardの設定ファイルにいくつかのディレクティブを追加することができます。何もそれを直接呼び出していないので、

## New rules for EventBus 3.0.x ## 
# http://greenrobot.org/eventbus/documentation/proguard/ 

-keepattributes *Annotation* 
-keepclassmembers class ** { 
    @org.greenrobot.eventbus.Subscribe <methods>; 
} 
-keep enum org.greenrobot.eventbus.ThreadMode { *; } 

# Only required if you use AsyncExecutor 
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { 
    <init>(java.lang.Throwable); 
} 
関連する問題

 関連する問題