0

以下は、問題を説明するための簡単なコード フラグメントです。
メソッド「onActivityResult」に記録されたフィールド「tag」の値が「tag_modified」ではないのはなぜですか?
「startActivityForResult」の非同期呼び出しも試しましたが、そのような問題はありません。
この問題は、Moto Milestone でのみ発生しますが、HTC G7 ではすべてうまくいきます。

public class HelloSnapshot extends Activity {

        private static Logger logger = Logger.getLogger(HelloSnapshot.class.getName());

        final int REQUESTCODE_SNAPSHOT = 1;

        String tag = "tag_initial";

        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                Button button = new Button(this);
                button.setText("BUTTON");
                button.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                                tag = "tag_modified";

                                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                                startActivityForResult(intent, REQUESTCODE_SNAPSHOT);
                        }
                });

                setContentView(button, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        }

        public void onActivityResult(int requestCode, int resultCode , Intent data) {
                switch (requestCode) {
                case REQUESTCODE_SNAPSHOT:
                        if (resultCode == Activity.RESULT_OK) {

                                logger.info(tag);

                        }
                        break;
                }
        }
}
4

1 に答える 1

0

私はそれを見つけました...

一部のAndroidOSは、メモリ関連の例外を回避するために、アクティビティを呼び出すスナップショットを強制終了します。したがって、メソッドonSaveInstanceStateを介してすべての状態を保存し、呼び出し元のアクティビティが再度作成されたときにそれらを取得する必要があります。

さらに、それらのシングルトンオブジェクトのように、メモリに格納されているすべての情報が消去される傾向があることもわかりました。したがって、私はいくつかの永続的なストレージアプローチによって保存を行い、後でそれらを復元する必要があります。

于 2011-03-27T15:35:58.503 に答える