2012-03-10 19 views
2

のでJNI_OnLoadを JNIJNIのクリーンアップとデーモンスレッド

の流れ

のthats - のJavaVM(静的メソッドを呼び出すためのJCLASSを取得)

が続いてCにJavaから何かを呼び出す必要があります:

のgetenv()それを使用するJNIEnvのAttachCurrentThread()を取得します。
コールJavaメソッド
プロセスのJavaメソッドは値を返しました。
DetachCurrentThread() - 無料のスレッド
Somethereエンドで
は、DestroyJavaVM()

まあの質問は次のとおりです。
あり

  1. は、DestroyJavaVM(コールする)と私がする必要がある場合そう? In onDestroy()私の主なアクティビティは?
  2. は今までに電話して、私はそこにクリーンアップする必要がありますどのようなJNI_onUnloadですか?

  3. は私が静的なグローバルvaiableに保存されている何とか自由JCLASSが必要ですか?関数の戻り値の後に
  4. jobjects、スコープjarrays/jarrays要素、文字列と文字列の文字のうち
  5. ドゥJNI無料ローカルまたは私はいつもそれに目を維持しなければならない(env- を呼び出す>(何かを)リリース)
  6. は何ですか利点と用途AttachCurrentThreadAsDaemon()?あなたは、もはや(おそらくあなたのプログラムの最後で)JVMを使用しないとき

答えて

1
  1. は、DestroyJavaVM()が呼び出されなければなりません。クラスがアンロードされるとき(そのクラスローダーは、例えば削除されたため)

  2. JNI_onUnloadが呼び出されます。

  3. クラスヌルにその参照を解放し、そのクラスローダーを削除します。

  4. JNIのjarrays/jarrays要素、文字列とjobjectsのいずれかJVMまたは(あなたが管理すること)C緩衝液を用いて割り当てられます。前者の場合は#3を参照してください。

  5. AttachCurrentThreadAsDaemon()は、シャットダウン時にスレッドが終了するのを待つべきではないことをJVMに指示します(デーモンに役立ちます)。

幸運を祈る!

+0

3歳の質問に対して、-1の背後にある論理は、作成者にとって適切な回答として「受け入れられる」とは何ですか? – Gil

関連する問題