如何避免在onCreate()中执行某些代码

时间:2012-08-16 15:41:12

标签: android oncreate

我在Activity中处理onCreate()时遇到了一个主要问题。就像thread所说的那样,我只能在主Activity的onCreate()方法中执行一段代码。所以我按照该线程中的步骤执行以下操作:

/*I've updated the code to SharePreferences version*/

public class MyApp extends Activity {
   private static RMEFaceAppActivity instance;
   private boolean wascalled = false;

   private SharedPreferences sharedPreferences;       
   private SharedPreferences.Editor editor; 


   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);

     setContentView(R.layout.main);

      //initiate some buttons here

     sharedPreferences = this.getSharedPreferences("test",0);  
     editor = sharedPreferences.edit();  

    if(sharedPreferences.getString("wascalled", "false").equalsIgnoreCase("false"))
    {
        //work can only be done once
        editor.putString("wascalled", "true");
        editor.commit();
    }
        //set buttons to listener methods

   }

   void onClick(View arg0)
   {
      if(arg0.getId() == R.id.button1)
      {
         Intent intent = new Intent(this, MyChildApp.class);
         startActivity(intent);
      }
   }

}

在MyChildApp课程中,我在那里完成工作时调用了finish()。但是,字段wascalled始终为false。我想当onCreate()MyChildApp返回时第二次执行时,wascalled应该已经设置为true。但事实并非如此。每次从onCreate()返回时,MyChildApp方法中的if语句中的代码都会执行。

有人对此提出建议吗?非常感谢。

3 个答案:

答案 0 :(得分:1)

定义 SharedPreferences 并初始存储一个值0/false,以表明wascalled()从不被调用。

现在,当第一次调用wasCalled时,将此SharedPreference变量的值更新为1/true

下次运行onCreate()时,检查SharedPreference中变量的值,如果值为1 / true,则不要再次执行该值。

实施SharedPreferences的代码:

final String PREF_SETTINGS_FILE_NAME = "PrefSettingsFile";
int wasCalledValue;

onCreate() {

....


SharedPreferences preferences = getSharedPreferences(PREF_SETTINGS_FILE_NAME, MODE_PRIVATE);
wasCalledValue=  preferences.getInt("value", 0); 

if(wasCalledValue == 0)
{
// execute the code
//now update the variable in the SharedPreferences
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("value", 1);
editor.commit();

}

else if(wasCalledValue == 1)
{
//skip the code
}

} // end of onCreate()

答案 1 :(得分:0)

当您从MyChildApp返回时,myApp正在重新创建,因此再次调用onCreate,并再次初始化变量(这就是为什么被称为始终为假的原因)。

其中一种可能的解决方案是在SharePreferences

中存储iscalled状态

答案 2 :(得分:0)

wascalled将始终为false,因为它是Activity实例的一部分。它是在你的活动中宣布的:

private boolean wascalled = false;

重新创建活动时,所有实例变量都会初始化为默认值,这就是您始终false的原因。

如果您注意thread中的代码,您会注意到wascalled是另一个类的一部分,而不是Activity的类。

if (!YourApplicationInstance.wasCalled) {
}

在这个具体的例子中,YourApplicationInstance是一个单独的类,它使状态wascalled变量。