Android Studio移动应用开发——onCreate、onSaveInstanceState、onRestoreInstance一个参数和两个参数

在做Android生命周期实验过程中,把 Log.i(TAG, "(1) onCreate()") 写到了含有两个参数的函数 onSaveInstanceState(Bundle, PersistableBundle) 中,运行过程中并没有输出预想的内容。

在这里插入图片描述
查看函数定义,这个函数是通过调用 onSaveInstanceState(Bundle) 实现的。
在这里插入图片描述
那么这两个函数有什么区别呢?

看上面图上圈起来的"but",发现onSaveInstanceState(Bundle, PersistableBundle)只能被“persistAcrossReboots”属性的activity调用。要用这个函数,需要在配置文件中为Activity设置一个属性:

android:persistableMode="persistAcrossReboots"

此后就可以使用含有两个参数的onCreate、onSaveInstanceState、onRestoreInstance函数了。具体参见: bug修复-android中的onCreate两个参数的方法是什么鬼?


两种函数使用场景的区别原文链接

  • onCreate(Bundle):当Activity非正常销毁之后,例如手机旋转,内存不足导致的后台自动销毁。
  • onCreate(Bundle, PersistableBundle):手机由于过热,没电或者第三方定制Rom由于卡顿而异常关机的情况,能找回之前前台的数据,实际上是一种数据持久化的Activity。

onSaveInstanceState函数执行条件:

  1. 点击home键回到主页
  2. 点击任务键选择运行其他程序
  3. 从activity中启动一个新的activity时
  4. 按下电源键关闭屏幕(执行onRestoreInstance)
  5. 横竖屏切换(执行onRestoreInstance)

onRestoreInstance函数执行条件:
activity是被系统回收,重新创建activity的情况下调用onRestoreInstance()。如:按下电源键关闭屏幕、横竖屏切换。

在这里插入图片描述
函数执行顺序:

  1. onCreate()初始化Activity —> onStart()生成可视化界面 —> onResume()进入活动状态。
  2. 旋转屏幕后,onPause()进入暂停状态 —> onStop()对用户不可见 —> onSaveInstanceState()保存状态信息 —> (横竖屏切换的时候会由系统先销毁activity,然后再重新创建)onStop()对用户不可见 —> onDestory()销毁活动,释放资源
  3. 再次新建一个activity,由于activity是被系统回收,所以重新创建activity的情况下会调用onRestoreInstance():onCreate()初始化Activity —> onStart()生成可视化界面—> onRestoreInstance()恢复onSaveInstanceState()保存的用户界面信息—> onResume()恢复被onPause()停止的用于界面更新的资源。

Activity事件回调函数的调用顺序:

在这里插入图片描述

很高兴为您介绍Android Studio开发一个检票应用的具体代码。以下是一个简单的示例代码: ```java import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private EditText ticketNumberEditText; private Button checkTicketButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ticketNumberEditText = findViewById(R.id.ticketNumberEditText); checkTicketButton = findViewById(R.id.checkTicketButton); checkTicketButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String ticketNumber = ticketNumberEditText.getText().toString(); if (isValidTicket(ticketNumber)) { Toast.makeText(MainActivity.this, "票号有效", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "票号无效", Toast.LENGTH_SHORT).show(); } } }); } private boolean isValidTicket(String ticketNumber) { // 在这里编写检票逻辑,判断票号是否有效 // 返回true表示有效,返回false表示无效 return ticketNumber.startsWith("TICKET"); } } ``` 上述代码是一个简单的Android应用程序,包含一个EditText用于输入票号,一个Button用于检票,以及一个Toast用于显示检票结果。在点击检票按钮时,会调用isValidTicket方法进行检票逻辑判断,并通过Toast显示结果。 请注意,上述代码仅为示例,您可以根据实际需求进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值