Android onStop()被不必要地调用

时间:2014-02-09 22:36:55

标签: android activity-lifecycle

我有两项活动: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天时间,接近我的智慧结束。任何帮助表示赞赏。

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。然后,CfinishB将被置于前面,但onNewIntent被调用而不是onCreate