我有两项活动:B和C.
B开始C,然后通过用户操作,C结束,我再次获得A.
以下是将用户从 B 转移到 C
的代码 public void goToC(View v) {
Intent intent = new Intent(this, C.class);
intent.putExtra("STUFF", stuff);
startActivityForResult(intent, 1);
}
以下是 C 中将数据传回 B
的代码long rowsUpdated = myModel.updateStuff(this, stuff);
if (rowsUpdated == 1) {
Intent intent = new Intent();
// put the data in the intent
intent.putExtra("STUFF", stuff);
// set the flags to reuse B
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
// set result code to notify the ItemEntriesActivity
setResult(1, intent);
// finish the current activity i.e. C
finish();
}
以下是接收上述数据的 B 中的代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (intent != null) {
switch (resultCode) {
case 1:
// Update the class variable, so that onResume() gets the updated value
stuff = intent.getExtras().getParcelable("STUFF");
break;
default:
break;
}
}
}
我的问题是此代码正常运行,但每当我从 B 转到 C 时, B 上的onStop()
叫做。我没有在 B 上调用finish()
的任何代码。这会强制每次调用B.onCreate()
,并使我的应用程序变慢。我还努力将android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
放在我的Manifest中的两个活动中,但没有运气。我已经花了2天时间,接近我的智慧结束。任何帮助表示赞赏。
答案 0 :(得分:1)
如果您阅读本页
http://developer.android.com/training/basics/activity-lifecycle/stopping.html
它解释说,当你的活动开始另一个时,第一个将停止。
如果要保持第一次运行,请在服务中使用业务逻辑。
这是一个关于
的教程http://www.vogella.com/tutorials/AndroidServices/article.html
或者从第二个活动中返回足够的信息以便在停止之前继续,也许在停止之前有一些信息。
答案 1 :(得分:0)
要绕过onCreate()
而不是startActivityForResult
,您可以从activity C
开始B
(不要在finish()
上致电B
)。然后在C
使用标记activity B
启动Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP
。将您要传递的信息传回B
中的intent bundle
。然后,C
将finish
,B
将被置于前面,但onNewIntent
被调用而不是onCreate
。