NDK/JNI経由のネイティブライブラリを使用するアンドロイドサービスがあります。サービスが停止されるまで、ネイティブライブラリを静的にアンドロイドサービスを再起動した後、JNIクラッシュを呼び出すか?
static {
System.loadLibrary("mylibrary");
if (!nativeClassInit())
throw new RuntimeException("native init failed");
}
すべてが正常に動作します...提案されているように初期化/ロードされている(例えば、サービスが開始されるUIの活動から/停止)。問題は、サービスが停止され、アンドロイドによってタスクがまだ殺されていない場合で、ユーザーがサービスを再起動すると、ネイティブライブラリが再ロードされず、ネイティブ関数の呼び出しによってネイティブコードがクラッシュすることです。
再起動後に再度nativeClassInit()メソッドを呼び出そうとしましたが、これは役に立ちませんか? また、他の記事で、ネイティブライブラリのアンロードがAndroidでは許可されていないことがわかりました。
クラッシュしたときのネイティブコードとは何ですか?そのエラーは何ですか? –
サービスの再起動の間にネイティブ側のJNIポインタ(JniENV、jobject-sなど)を保持していますか? – ognian