- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我遇到了 2 种不同的类型来让我的 Activity 基于一些参数运行。第一个是 savedInstanceState,另一个是 getIntent.getExtras()
Q1)所以我不明白的是,一旦我将 bundle 传递给我的 Activity 然后启动它,它就应该有 bundle 。但是,如果由于某种原因再次重新创建该 Activity ,它应该再次具有相同的包。 (我说得对吗?)
Q2) 基于 Q1 是真的事实,以及我不能在 Activity 已经开始后覆盖 bundle 这一事实,我想如果出于某种原因在我已经开始的 Activity 中,我想改变一些 bundle 的参数,我应该创建一些 Activity 字段并在我的 Activity 生活中使用这些字段。如果出于某种原因将重新创建我的 Activity ,则覆盖 saveInstanseState 以保存新字段。是真的吗?
Q3) 基于以上所有事实,在 onCreate() 中,Android 世界中的每个 Activity 是否都需要像这样开始:
if (savedInstanceState != null) {
mType = savedInstanceState.getInt("some_val1");
mCardId = savedInstanceState.getLong("some_val2");
mQuery = savedInstanceState.getString("some_val3");
mCategory = savedInstanceState.getLong("some_val4");;
} else {
mType = getIntent().getExtras().getInt("some_val1");
mCardId = getIntent().getExtras().getLong("some_val2");
mQuery = getIntent().getExtras().getString("some_val3");
mCategory = getIntent().getExtras().getString("some_val4");
}
Q4) 假设调用了 onSaveInstanceState 并保存了不同于启动 Activity 的原始包 (getIntent.getExtras) 的值,如果再次重新创建 Activity ,这是否意味着 saveInstanceState 不同于 getIntent.getExtras( ) 或者他们现在是一样的? (如果它们相同,那么上面代码中的 if/else 没有真正的意义,因为它们是相同的!)。
问题 5)如果我没有覆盖 onSaveInstanceState 但是当我创建 Activity 时我将一个 Bundle 传递给它,这是否仍然意味着如果再次重新创建 Activity 我可以获得我的原始 bundle? (我想这个问题会根据其他答案自行回答)
最佳答案
getIntent().getExtras()
和savedInstanceState
之间的主要区别是它们有不同的用法。 Intent 用于 Activity 之间的通信,而保存的状态用于离开 Activity 时用户界面的当前状态,例如按主页按钮。因此它将保存您的 ListView
的位置和类似的或未保存的 TextEdit
的值。
Q1:是的,一般情况下,只要您不再次打开该 Activity ,信息就不会丢失。
Q2:到目前为止是正确的。默认 View 会保存它们的状态,所以你不需要自己做。但是,如果您的 Activity 使用不同的包第二次启动,您将拥有新值。
Q3:没有必要,这取决于您的用例,但这不会破坏任何东西。关键是当您从互联网加载日期时,您只需等待一次,在第二次调用 onCreate()
时,数据将被恢复(如果您在具有 id 的 UI 元素中显示它们! ).
Q4: Intent 是初始值,而保存状态是值的修改状态。
Q5:一般来说应该是一样的。由于基本的 ui 元素将默认保存它们的状态。
保存状态的要点是即使您的应用程序在后台被销毁,也能保持用户界面的变化。因此,即使您的应用程序已不在您设备的内存中,您的应用程序也会从它离开的那一点恢复。
关于android - savedInstanceState 与 getIntent().getExtras(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35528969/
我正在开发一个 Android 应用程序,它允许我在 CreateActivity 中创建一个事件,然后通过 Bundle 和 putExtras() 将数据从 CreateActivity 传递到
我进行了很多搜索并尝试了多种方法,但找不到任何可以避免我的错误的方法。 我正在为我的学习开发应用程序,我的 MainActivity 中有一个字符串,然后我在我的服务中调用它。我试过这样的事情: 下一
我的应用设计有点不同.. Activity--> Activity---> B ----> Activity c ---- Activity D 之后它应该像 ActvityD--> Activity
好的 所以我想使用 getextrand putextra 方法将值从一个 Activity 传递到另一个 Activity 。 在我想要接收数据的第二个 Activity 中,充满了按钮和 Text
我正在闹钟,服务是通过闹钟启动的。我希望服务接收额外数据,因此通过谷歌搜索我将标志设置为 Intent.FILL_IN_DATA。下面是我的代码。(只显示重要部分)(我有几种报警方式,调用不同的服务)
我在两个 Activity 之间传递值并像这样获取值: Bundle extras = getIntent().getExtras(); if (extras != null) {
我想将我的对象putExtra()放入 Intent 中,然后将其发送到常驻服务并让它进一步处理该对象。 我已经实现了 Parcelable 等,并且我已经完成了 putExtra() 代码。现在我遇
我有一个带有 onItemClick 方法的 fragment ,在该方法中我调用另一个 Activity 并传递 id 参数: public class MoviesListFragment ext
我是 android 世界的新手,所以我开始通过创建一个“Keep”应用程序来练习。因此,正如您想象的那样,我可以添加注释。问题就在这里,我的主要 Activity 在这里: @Override pr
这是我的代码。 在我的主 .java 文件中。 public void showQuiz (View view){ Username = (EditText) findViewById
Bundle extras = intent.getExtras(); if (extras != null) { Toast.makeText(context, "Message rec
所以,我开始 MainActivity.java 有以下代码。 @Override protected void onCreate(Bundle savedInstanceState) { s
在一个类中,我在 onCreate 方法之外声明了以下变量: Double isowei2 = 9.36; Double iso2 = 10.54; 在 onCreate 方法中,我有这个: fin
是否可以通过 Intent 将日历对象从一个 Activity 传递到另一个 Activity ?我对 hasExtra("startDate") 是正确的,但我无法获取对象本身......对于初学者
我有一个严重的问题。在我的 Android 应用程序中,我有这段代码: 类:MessagingService.class public void onMessageReceived(RemoteMes
正在开发支持 GCM 的应用程序,我可以接收消息。但是格式显示为 Message: Bundle[{message=test, android.support.content.wakelock=3,c
在我的应用程序中,我有三个 Activity :A、B、C。 Activity A 包含带有 @OnItemClick 的 ListView ,该 ListView 启动 Activity B 并向其
我正在使用以下代码,以便当用户在浏览器中选择共享选项时显示我的应用程序: 当用户选择我的应用进
我知道这个问题已经被问过很多次了,但答案似乎从来都不适用。 Activity 1: public void buttonPress(View view){ Intent i = new Int
我正在使用 fcm 发送带有数据有效负载的通知(我排除了通知对象,因为我希望用户无论应用程序处于前台/后台还是已被终止,都能收到通知)。 我能够获取通知并在用户点击通知时将用户导航到特定 Activi
我是一名优秀的程序员,十分优秀!