Android 未正确调用finish()

Android 未正确调用finish(),android,android-activity,Android,Android Activity,我有以下活动: public class MyActivity extends Activity { String myString; @Override protected void onCreate(Bundle bundle) { super.onCreate(arg0); setContentView(R.layout.myLayout) getData(bund

我有以下活动:

public class MyActivity extends Activity {

        String myString;

        @Override
        protected void onCreate(Bundle bundle) {
            super.onCreate(arg0);
            setContentView(R.layout.myLayout)

            getData(bundle);
            doSmoethingWithMyString();
        }

        void getData(Bundle bundle) {
                if(bundle != null) {
                     myString = bundle.getString("myString")
                } else {
                    myString = getIntent().getStringExtra("myString")
                }

                if(myString == null)
                    finish();
        }

        void doSomethingWithMyString() {
                // here the string should be used
        }

}
如果myString为null,则应执行finish()并关闭活动。但是,尽管调用了finish(),doSomethingWithMyString()似乎在此之后执行,并引发一个NullPointerException。如果我将doSomethingWithMyString()注释掉,则该活动将正确关闭


知道怎么回事吗?

完成()不会立即关闭您的活动。只有当控件返回到Android框架时,关闭序列才会启动。因此,onCreate中的所有剩余代码都将被执行,确保不会立即关闭活动。只有当控件返回到Android框架时,关闭序列才会启动。因此,onCreate中所有剩余的代码都将被执行,这肯定会解决您的问题。请参阅我的评论,了解这一点的原因

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(arg0);
        setContentView(R.layout.myLayout)

        getData(bundle);
        if(!isFinishing()) {
         doSmoethingWithMyString();
        }
    }

这应该能解决你的问题。请参阅我的评论,了解这一点的原因

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(arg0);
        setContentView(R.layout.myLayout)

        getData(bundle);
        if(!isFinishing()) {
         doSmoethingWithMyString();
        }
    }

我根本看不到在哪里调用了
doSomethingWithMyString()
。@特洛伊木马最有可能在
onDestroy()
setBaseData()
finish()
可能不会立即停止活动。doSomethingWithMyString()是setBaseData():)复制和粘贴错误@iccthedral:难道没有一种方法可以让活动在活动结束后立即关闭,而不执行任何代码吗?用try{}catch{}块解决这个问题似乎不是最好的方法。我根本看不到调用
doSomethingWithMyString()
的地方。@特洛伊木马程序很可能在
onDestroy()或
setBaseData()中
finish()
可能不会立即停止活动。doSomethingWithMyString()是setBaseData():)复制和粘贴错误@iccthedral:难道没有一种方法可以让活动在活动结束后立即关闭,而不执行任何代码吗?用try{}catch{}块解决这个问题似乎不是最好的方法。。