三星手机note 3 调用系统拍照后,屏幕旋转导致,activity生命周期变更,程序奔溃或者无法获取图片。

在三星的手机上使用时,发现调用相机拍完照片返回时,触发它的activity的生命周期调用了onDestroy()–>onCreate(); 重新走了onCreate()方法;导致系统崩溃。

方法一:刚开始调用了onSaveInstanceState(Bundle savedInstanceState)和onRestoreInstanceState(Bundle savedInstanceState)这个方法来实现,虽然方法比较笨,但是可以通过在onSaveInstanceState中保存一些你需要的变量,在onCreate()方法中判断savedInstanceState是否为null,不为null则调用onRestoreInstanceState()方法取出之前存的变量来使用,这相当于重新加载了一边当前activity。

方法二:上面的方法可行,但并不是解决问题的根本办法,后来通过查看发现在调用相机时,activity从竖屏切换到了横屏,在横竖屏切换导致了activity重新装载,找到根本原因后,在activity中通过
android:configChanges=”orientation|keyboardHidden|screenSize”

这个属性,可以约束调用相机时,保持当前activity竖屏状态不变,从而解决了activity重新加载的问题。
是在manifest文件中配置的。注意是三个属性,不能少。

        <activity
            android:name=""
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:windowSoftInputMode="stateHidden|adjustResize|stateAlwaysHidden" >
        </activity>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题是关于Android开发的,我会尽力回答。首先,基于Activity生命周期方法是指在Android中,每个Activity有一系列的生命周期方法,如onCreate、onStart、onResume、onPause、onStop、onDestroy等,这些方法的调用顺序和时机都是由系统自动控制的,我们可以通过重写这些方法来实现对Activity的管理和控制。下面是一个简单的示例代码: ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // TODO: 在这里进行一些初始化工作 } @Override protected void onStart() { super.onStart(); // TODO: 在这里进行Activity启动时的操作 } @Override protected void onResume() { super.onResume(); // TODO: 在这里进行Activity恢复时的操作 } @Override protected void onPause() { super.onPause(); // TODO: 在这里进行Activity暂停时的操作 } @Override protected void onStop() { super.onStop(); // TODO: 在这里进行Activity停止时的操作 } @Override protected void onDestroy() { super.onDestroy(); // TODO: 在这里进行Activity销毁时的操作 } } ``` 接下来,您提到了利用SharedPreferences类设计一个便签条。SharedPreferences是Android中用于存储键值对数据的类,可以在应用程序中轻松地实现数据的持久化存储。我们可以利用SharedPreferences来存储用户的便签信息。下面是一个简单的示例代码: ```java public class NoteActivity extends AppCompatActivity { private EditText editText; private SharedPreferences preferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_note); editText = findViewById(R.id.edit_text); preferences = getPreferences(MODE_PRIVATE); String note = preferences.getString("note", ""); editText.setText(note); } @Override protected void onPause() { super.onPause(); String note = editText.getText().toString(); preferences.edit().putString("note", note).apply(); } } ``` 在这个示例代码中,我们在NoteActivity的onCreate方法中初始化了一个EditText控件和一个SharedPreferences对象。然后通过SharedPreferences对象来读取之前存储的便签信息,并在EditText控件中显示出来。在NoteActivity的onPause方法中,我们将EditText中的内容存储到SharedPreferences中,以便下一次打开时可以继续编辑。这样,就可以实现一个简单的便签应用了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值