1

同じパッケージに 2 つのアクティビティがあります (メインのアクティビティと別のアクティビティ)。他のアクティビティを で開始する必要がある場合がありstartActivityForResultます。2 つの質問があります。

  1. 2 つのアクティビティは同じスレッドに属していますか?
  2. メイン アクティビティでネイティブ ライブラリをロードした場合、他のアクティビティからネイティブ メソッドにアクセスできますか?

質問 2 について、 というネイティブ メソッドがあるとしNativeMethod1()ます。主な活動では、いつものように、次の宣言があります。

public native void NativeMethod1();

ネイティブコードでは、関数を適切に宣言します(Java_com_mypackage_myapp_などを使用して..)。他のアクティビティにも同様の宣言を追加し、ネイティブ ライブラリに対応するメソッド宣言も追加しました。すべてが正常に機能していますが、常に正しいとは限らないことを想定しているのではないかと心配しています。これにより、予期しないクラッシュが発生します。

4

1 に答える 1

1

Activity私はあなたのクラスにネイティブメソッドを追加しません。代わりに、すべてのアクティビティから使用できるシングルトン クラスを作成してください。

スレッドに関する限り、はい、Android の UI モデルはシングル スレッド (別名メイン スレッドまたは UI スレッド) であるため、すべてのアクティビティはメイン スレッドで実行されます。

ANR (Activity Not Responding) が発生するため、実行時間の長い操作を行っている場合は UI スレッドをブロックしないでください。そのため、ネイティブ メソッドで凝った処理を行っている場合は、AsyncTaskまたは または またはServiceを使用することをお勧めします。独自のバックグラウンド スレッド モデル。

于 2013-02-16T22:54:58.057 に答える