Android 报错 Activity 状态

本文介绍如何在Android应用中保存和恢复应用状态,包括使用onSaveInstanceState和onRestoreInstanceState方法的具体步骤,确保应用在重启后能正确恢复之前的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我近期学习了一下android sdk,不太清楚里面的一些原理,如何保存应用程序的状态,看下面hello的小例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
mTextView = new TextView( this );
if (savedInstanceState == null ) {
mTextView.setText( "Welcome to HelloAndroid!" );
} else {
mTextView.setText( "Welcome back." );
}
setContentView(mTextView);
}
private TextView mTextView = null ;
}

这个android 小例子应该是每个人都开发过的,我每次关闭程序再打开是都是给我显示第一个Welcome to HelloAndroid ,我想在第二次访问的时候能够显示 Welcome back,我该如何处理?

处理方法

你需要重写 onSaveInstanceState(Bundle savedInstanceState),把你想要保存的状态写入到 Bundle 中,如下

1
2
3
4
5
6
7
8
9
10
11
12
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super .onSaveInstanceState(savedInstanceState);
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
savedInstanceState.putBoolean( "MyBoolean" , true );
savedInstanceState.putDouble( "myDouble" , 1.9 );
savedInstanceState.putInt( "MyInt" , 1 );
savedInstanceState.putString( "MyString" , "Welcome back to Android" );
// etc.
}

Bundle 的本质是键值对的方式存储,你可以通过 onCreate()和 onRestoreInstanceState() 或的对应的值

1
2
3
4
5
6
7
8
9
10
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super .onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
boolean myBoolean = savedInstanceState.getBoolean( "MyBoolean" );
double myDouble = savedInstanceState.getDouble( "myDouble" );
int myInt = savedInstanceState.getInt( "MyInt" );
String myString = savedInstanceState.getString( "MyString" );
}

您通常会使用这项技术来存储实例的值的应用程序(选择,未保存的文本等)。


原文地址:http://www.itmmd.com/201410/38.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。            

### Android Studio 中 Activity 类缺失问题的原因与解决方案 当开发者在使用 Android Studio 进行应用开发时,有时会遇到 IDE 提示某个 `Activity` 类不存在的情况。这类问题通常由以下几个方面引起: #### 常见原因分析 - **类名拼写错误**:确保定义的活动名称完全匹配于声明的位置,注意大小写的准确性[^1]。 - **包路径不一致**:检查 `.java` 或者 `.kt` 文件所在的目录结构是否严格遵循所指定的包命名空间;任何偏差都会造成找不到相应组件的问题。 - **文件位置不当**:确认 Java/Kotlin 源代码被放置到了正确的模块内,并且该模块已被正确引入到项目的依赖项列表中。 - **同步 Gradle 失败**:如果项目构建脚本存在问题,则可能导致某些必要的库未能成功加载,进而影响到特定类型的识别。此时应查看控制台日志并修正潜在语法或逻辑上的失误后再重新执行同步操作[^3]。 - **Instant Run 功能干扰**:自 Android Studio 2.1 版本起,默认开启了 Instant Run(即时运行),这可能引发一些兼容性问题特别是对于多进程的应用程序而言更为明显。可以考虑暂时关闭这项特性来排除其带来的不确定性因素[^4]。 #### 实际案例解析及处理方法 假设当前遇到了如下情形——试图启动名为 `MainActivity` 的界面却收到 “Cannot resolve symbol 'MainActivity'” 错误提示,在这种状况下可采取以下措施逐一排查直至恢复正常状态: ```xml <!-- AndroidManifest.xml --> <application> <!-- ...其他配置... --> <activity android:name=".ui.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> ``` 上述 XML 配置片段展示了如何正确定义一个入口级别的 Activity 组件。请注意这里的相对路径前缀 `"."` 表明它位于根包之下,而具体实现则保存在一个叫作 `ui` 子包里边。 另外还需验证对应的 Kotlin/Java 文件是否存在以及内容无误: ```kotlin // src/main/java/com/example/myapp/ui/MainActivity.kt package com.example.myapp.ui import androidx.appcompat.app.AppCompatActivity import android.os.Bundle class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } } ``` 最后别忘了刷新整个工程使之生效,可通过点击菜单栏中的 Sync Now 来完成这一过程。倘若依旧无法解决问题的话,不妨清理本地缓存数据试试看,命令行为 gradlew clean 即可达成目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值