JNI_OnLoad()
は常にメインスレッドで呼び出されるか、System.load()
/System.loadLibrary()
呼び出しスレッドで呼び出されますか?私はAndroidについて話しています(Androidや純粋なOracle Javaの場合は意味がないと思います)。オラクルdocsによれば メインスレッドで `JNI_OnLoad`が常に呼び出されていますか?
答えて
、
jint JNI_OnLoad(JavaVM *vm, void *reserved);
ネイティブライブラリがロードされたときにVMがJNI_OnLoadを呼び出し( 例えば、System.loadLibraryを介して)。 ...
実装によってどのスレッドポリシーを選択するべきかは不明です。しかし、もっと正確な方法で記述されているかもしれません。
とにかく、少なくともJNI_OnLoad()
は、制御がSystem.load*()
から返される前に、同期的に呼び出されます。そして、それはSystem.load*()
が呼び出された同じスレッドで発生します。あなたは
にビットを掘ることができます確保するためにも、あなたはそれを試してみてください可能性があります分析し、その後、前後にSystem.load*()
とJNI_OnLoad()
内のログを追加しますログ順序antスレッドID。
最後に思考がほとんどありません。仕様通りJNI_Onload()
はロードを中止する可能性があります。
VMがJNI_OnLoadから返されるバージョン番号を認識しない場合、ネイティブライブラリをロードできません。
したがって、有効なJNI_VERSION_*
定数以外の何かが返された場合、System.load*()
は失敗する必要があります。その結果、JNI_ONload()
は対応するSystem.load*()
より早く返さなければなりません。それは他のスレッドにSystem.load*()
- 実行
JNI_ONLoad()
をし、それが
を終了するまで、2番目の1があるように思わSystem.load*()
をブロック:マルチスレッド環境では、このような行動は、2つの方法で達成することができます過度の複雑さと無駄。だからIMO最初のものは唯一の明確な選択です。
- 1. CATiledLayer drawLayer:メインスレッドで常に呼び出されているinContext
- 2. メインスレッドでonStop()が呼び出されています
- 3. メインスレッドでNSURLSessionDataTask補完ブロックが呼び出されていますか?
- 4. メインスレッドでアクティビティ/フラグメントのライフサイクルメソッドが呼び出されましたか?
- 5. FirebaseMessagingService onMessageReceivedがメインスレッドで呼び出されましたか?
- 6. becomeFirstResponder()は常にメインスレッドで呼び出す必要がありますか?
- 7. IKImageBrowserView "--ImageKit Error:reloadDataが非メインスレッドで呼び出されました"
- 8. NSURLConnectionデリゲートがiOS 5のメインスレッドで呼び出されました
- 9. iOSデリゲートとオブザーバーによって呼び出されたメソッドがメインスレッドで実行されていますか?
- 10. Android NDKでは通常JNI_OnLoadが使用されていますか?
- 11. メインスレッドで呼び出されたときにUIが更新されないSwift
- 12. メインスレッドで[NSRunLoop runMode:beforeDate:]を呼び出すと、メインスレッドで実行されているNSOperationsが待ち受けになる
- 13. コールをクローンすると、コールバックがメインスレッドから呼び出されます。
- 14. autocmdは常にvimrcで呼び出されますか?
- 15. IEで常にHTMLページのアンロードが呼び出されない
- 16. performSelectorOnMainThread:waitUntilDone:がメインスレッドから呼び出されたとき、いつ実行されますか?
- 17. AssemblyResolveが常に呼び出され、MyAssembly.resourcesを要求します
- 18. android:onDrawが常に呼び出されます
- 19. Application.Run()が呼び出される前に終了(終了)とアプリケーションが呼び出されていますか?
- 20. textFieldShouldBeginEditingが呼び出され、textFieldDidBeginEditingが呼び出されない
- 21. メインスレッドから更新が呼び出されてもUIが更新されない
- 22. window.onbeforeunloadが呼び出されて、ファイルダウンロードのためにwindow.locationで呼び出されています。
- 23. initWithNibNameの前にViewDidLoadが呼び出されていますか?
- 24. @PostConstructメソッドは、Jerseyサービスで常に呼び出されています
- 25. 関数が呼び出されていても呼び出されていませんか?
- 26. captureStillImageAsynchronouslyFromConnection:stillImageConnection completionHandlerが常に呼び出されない
- 27. 呼び出されたスレッドからメインスレッドに情報を戻すか?
- 28. notification.girmというコールバック関数が常に呼び出される
- 29. 呼び出し元アクティビティでonActivityResultが呼び出されていません
- 30. cellForRowAtIndexPath:メインスレッドで呼び出しても、バックグラウンドでダウンロードされた画像に対してsetNeedsDisplayが機能しない