Android在Activity上只运行一次类

时间:2015-02-09 19:28:27

标签: java android class android-activity

我编写了一个类,只希望它在该活动中运行一次。

因此,当活动恢复时,此类将不再有任何效果,另一个类将生效。

让我们先说一下ACTIVITY,而不是应用程序,它会执行课程,而在其他每次启动时它都会做其他事情。如果应用程序已关闭并重新进入,它将记住该类已经运行并且不会执行该操作。

我希望这一切都有意义!

继承我想要只运行一次的课程:

//Should only happen on first launch of activity.
    public void AgeCalculation() {

            if (male == true && age >= 18) {
                newweight = (weight * 0.8);
            }
            weightresultText.setText(Double.toString(newweight));
            //Saves Weight to sharedpreference to use later.
            SaveWeight();
        }

这是每隔一次运行的课程:

    //runs on every other launch of activity

        public void AfterFirstLaunch(){
//The button clicks get the saved value and increments it and saves it again.
            buttonClick1();
            buttonClick2();
            buttonClick3();
            buttonClick4();
            buttonClick5();

            //receive value on other launches and show on field.

            SharedPreferences shoulderPreference = getApplicationContext().getSharedPreferences("ShoulderWeightPreference", Context.MODE_PRIVATE);
            String newweight =  shoulderPreference.getString("storednewweight", "");
            weightresultText.setText(newweight);
        }

2 个答案:

答案 0 :(得分:1)

在Activity中创建一个名为onCreate()的继承方法,只要创建了Activity,就会调用该方法。

为了检查Activity是否已在运行,可以在onCreate()方法中检查传入的参数Bundle savedInstanceState是否为空。

在活动首次运行时,savedInstanceState将为空。任何后续的创作"将使savedInstanceState非空,因为它已经创建。

所以,为了达到你想要的结果,你会有这样的结果:

@Override
protected void onCreate(Bundle savedInstanceState) {
    if(savedInstanceState == null) {
        // The Activity is brand new
        AgeCalculation();
    }
    else {
        // The Activity has been re-created
        AfterFirstLaunch();
    }

    // ... Other stuff
}

顺便说一句,你说你想要运行这些不同的"类"但我认为你的意思是方法?

编辑:如果我错了,请纠正我,但我认为你只需要在第一次运行时填写共享偏好?

如果是这种情况,那么您只需要检查您的共享偏好是否存在:

@Override
protected void onCreate(Bundle savedInstanceState) {
    SharedPreferences shoulderPreference = getApplicationContext().getSharedPreferences("ShoulderWeightPreference", Context.MODE_PRIVATE);

    // The second parameter in getString() is the default value which
    // is returned if the prefernece "storednewweight" does not
    // exist (yet)
    String prefValue =  shoulderPreference.getString("storednewweight", "");

    if(prefValue.equals("")) {
        // The preference was not created before
        AgeCalculation();
    }
    else {
        // Preference already created
        AfterFirstLaunch();
    }

    // ... Other stuff
}

答案 1 :(得分:0)

你应该看一下developper网站上的android,一切都在那里解释。

所以你会有类似的东西:

protected void onCreate() {
    AgeCalculation();
    super.onCreate(); //since we overridden it we want it to run too.
}

protected void onResume() { //it could be on start depending on what you want
    AfterFirstLaunch();
    super.onResume();
}