私は画像処理の Android アプリケーションに取り組んでいます。時間のかかる関数を提供し、独自のメモリを割り当てる C++ シングルトン オブジェクトがあるとします。さらに、C++ ライブラリには、時間のかかる作業を行う他の関数もいくつか用意されています。この関数は、シングルトン オブジェクトによって呼び出されます。独自の一時メモリ (関数の終了時に解放される) を割り当てることができ、シングルトン オブジェクトとデータを交換する必要があります。ワークフローは次のとおりです。
- ネイティブ C++ ライブラリが読み込まれ、シングルトン オブジェクトが作成されます (メモリが割り当てられ、アセット ディレクトリからデータが読み込まれます)。
- ユーザーは、アプリケーション インターフェイスを使用して、画像を選択して読み込みます
- 画像は、いくつかの情報を計算するシングルトン オブジェクトに渡されます
- ユーザーは特定の画像処理アルゴリズムを要求でき、シングルトン オブジェクトは対応する関数を呼び出すように要求されます。
- 4 から繰り返すか、ユーザーが別のイメージをロードした場合は 2 に進みます (シングルトン オブジェクトはリセットされます (ステップ 1 で割り当てられたメモリは、アプリケーションが終了するまで保持されます))。
ステップ 2 と 3 は、アプリの中で最も時間がかかる部分です。時間がかかりすぎた場合にユーザーが現在の処理を停止できるようにし、時間のかかる処理アルゴリズムの間、アプリケーションの応答性を維持できるようにしたいと考えています。このアプリを実行する最も簡単な方法は、ネイティブ関数を呼び出して待機することですが、これはおそらく UI をブロックします。もう 1 つの方法は、これらの関数を設計して、処理された N ピクセルごとにフラグをチェックし、関数を停止する必要があるかどうかを確認することです (これにより、停止が発生したときにメモリを解放できます)。3 番目のオプションは、Java スレッドを使用することですが、どうすればよいでしょうか?