世界のお仲間たちよ。私は助けが必要です。オン/オフラインで変更するとXamarin + Mvvmcross + Multidexがクラッシュする
私はMvvmcross 4.4とFirebaseを使ってXamarinでアプリケーションを開発しました。 Androidプロジェクトでは、私はmultidexを実装しなければなりませんでした。発生する問題は、アプリケーションが実行されていて接続が失われている(飛行機モード、WiFiオフなど)、またはその逆の場合です。
マルチデックスをビルドするカスタムリストでは、Firebaseの主な依存関係、アプリケーション自体、フレームワークはすべてメインファイルに置かれます。
java.lang.RuntimeException: Unable to instantiate receiver com.developer.appname.Reachability: java.lang.ClassNotFoundException: Didn't find class "com.developer.appname.Reachability" on path: DexPathList[[zip file "/data/app/com.developer.appname-1/base.apk"],nativeLibraryDirectories=[/data/app/com.developer.appname-1/lib/arm, /vendor/lib, /system/lib]]
android.app.ActivityThread.handleReceiver()ActivityThread.java:2926
android.app.ActivityThread.access$1800()ActivityThread.java:172
android.app.ActivityThread$H.handleMessage()ActivityThread.java:1499
android.os.Handler.dispatchMessage()Handler.java:102
android.os.Looper.loop()Looper.java:145
android.app.ActivityThread.main()ActivityThread.java:5832
java.lang.reflect.Method.invoke(Native Method)
java.lang.reflect.Method.invoke()Method.java:372
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run()ZygoteInit.java:1399
com.android.internal.os.ZygoteInit.main()ZygoteInit.java:1194
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.developer.appname.Reachability" on path: DexPathList[[zip file "/data/app/com.developer.appname-1/base.apk"],nativeLibraryDirectories=[/data/app/com.developer.appname-1/lib/arm, /vendor/lib, /system/lib]]
dalvik.system.BaseDexClassLoader.findClass()BaseDexClassLoader.java:56
java.lang.ClassLoader.loadClass()ClassLoader.java:511
java.lang.ClassLoader.loadClass()ClassLoader.java:469
android.app.ActivityThread.handleReceiver()ActivityThread.java:2921
... 9 more
到達可能性は、接続の状態をチェックし、コアから使用されています:アプリケーションは、それが正しく検出されたオフライン打ち上げとされている場合は
public class Reachability : BroadcastReceiver, IReachability { ... }
<application android:name=".appname" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:allowBackup="true">
<receiver android:name=".Reachability">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
が報告されたクラッシュは、しかし、この表現します予想されるデータをキャッシュから表示する。アプリが起動され、firebaseからリアルタイムでデータが表示される接続がある場合も同じことが起こります。 強調すると、前の状態に従って、接続がオンまたはオフに切り替わるときにのみ失敗します。
ありがとうございました。何卒よろしくお願いいたします。
ありがとう@ York Shen、あなたのアドバイスは非常に便利でした。それとアプリケーションの実装中に、到達可能性サービスはシングルトンとして登録され、コアから使用されます。 しかし、OnReceiveが発生すると、セットアップに登録されているものとは別のサービスの別のコピーが使用されていると想定しました。 Reachabilityクラス内で必要なActionに使用されている変数を知っているので、静的と宣言し、そこからすべてがうまくいきました。 – Helper