0

バックグラウンド操作に既存の C ライブラリを使用する Android アプリケーションを構築しようとしています (つまり、ラジオ スキャン、ステーションへのチューニングなどを行います)。スタンドアロンの C 実行可能ファイルとして、メインループは下位レベル (ハードウェア コンポーネント) からのメッセージ処理を処理できます。私の理解では、JNIを使​​用すると、メイン関数は必要ありません。

1) 共有ライブラリが作成され、

2) 共有ライブラリは、それをロードした Java スレッドが生きている限り「生きている」。

では、C ライブラリが複数のスレッドを使用すると仮定すると、通常は最初のメインループで行われるメッセージ処理はどこで行われるのでしょうか? JNI 関数と一緒に宣言された C 関数を呼び出すのと同じくらい簡単ですか?

4

1 に答える 1

0

Re 2) ライブラリは、メモリに永続化するという意味で「生きている」。しかし、それ自体では何もしません。JNIを介して関数が呼び出されていなくても、ライブラリが「何かをする」必要がある場合は、もちろん別のネイティブスレッドが必要です。スレッドを作成し、通常の JNI 関数呼び出し (init メソッドまたはJNI_OnLoadその目的で使用) 内でメッセージ ループを開始できます。JNI 関数呼び出しが戻ると、実行が継続されます。次に、スレッドを停止して破棄するティアダウン メソッドも必要です (JNI_OnUnloadそのために使用できます)。

于 2012-07-29T16:20:43.310 に答える