finish()未正确调用

时间:2013-05-18 10:37:59

标签: android android-activity

我有以下活动:

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(),活动将正确关闭。

任何想法都错了?

2 个答案:

答案 0 :(得分:2)

这应该可以解决您的问题。请参阅我的评论,了解其原因。

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

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

答案 1 :(得分:1)

finish()不会立即关闭您的活动。仅当控件返回到Android框架时才会启动关闭序列。因此,onCreate中剩余的所有代码都将被执行