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

我已经发现了...

一些 android 操作系统杀死快照调用 Activity 以避免与内存相关的异常。因此,我必须通过方法 onSaveInstanceState 保存所有状态,并在再次构造调用活动时检索它们。

此外,我还发现,所有存储在内存中的信息都容易被擦除,就像那些 Singleton 对象一样。因此,我必须通过一些持久存储方法进行保存,并在以后恢复它们。

于 2011-03-27T15:35:58.503 回答