如何在首次打开应用程序时只启动一次活动?

我有一个活动,我只想在应用程序第一次运行时运行。

再也不会。 这是一个Facebooklogin活动。 我只想在应用程序初次打开时启动一次。

我怎么去做这个?

我通常所做的是在Main Activity添加一个特定的共享首选项的检查:如果缺less共享首选项,则启动单一运行的活动,否则继续执行主要活动。 当您启动一次运行“活动”时,将创build共享首选项,以便下次跳过。

编辑 :在我的onResume为默认的活动,我这样做:

  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); boolean previouslyStarted = prefs.getBoolean(getString(R.string.pref_previously_started), false); if(!previouslyStarted) { SharedPreferences.Editor edit = prefs.edit(); edit.putBoolean(getString(R.string.pref_previously_started), Boolean.TRUE); edit.commit(); showHelp(); } 

基本上我加载默认的共享首选项,并寻找prior_started布尔首选项。 如果没有设置,我将其设置,然后启动帮助文件。 我使用这个来自动显示第一次安装应用程序的帮助。

像这样的东西可能会工作。

 public class MyPreferences { private static final String MY_PREFERENCES = "my_preferences"; public static boolean isFirst(Context context){ final SharedPreferences reader = context.getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE); final boolean first = reader.getBoolean("is_first", true); if(first){ final SharedPreferences.Editor editor = reader.edit(); editor.putBoolean("is_first", false); editor.commit(); } return first; } } 

用法

 boolean isFirstTime = MyPreferences.isFirst(MyActivity.this); 

在您的onCreate语句中发布以下代码

  Boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE) .getBoolean("isFirstRun", true); if (isFirstRun) { //show start activity startActivity(new Intent(MainActivity.this, FirstLaunch.class)); Toast.makeText(MainActivity.this, "First Run", Toast.LENGTH_LONG) .show(); } getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit() .putBoolean("isFirstRun", false).commit(); 

FirstLaunch.classreplace为您想要启动的类

 SharedPreferences dataSave = getSharedPreferences("firstLog", 0); if(dataSave.getString("firstTime", "").toString().equals("no")){ // first run is happened } else{ // this is the first run of application SharedPreferences.Editor editor = dataSave.edit(); editor.putString("firstTime", "no"); editor.commit(); } 

我没有共享Prefrence这样做…因为我知道共享prefrence消耗一些内存,所以我在全局类中使用公共静态布尔variables….首先,我做了全局类Appconfig …然后我做了这样的布尔静态variables:

 public class Appconfig { public static boolean activity = false; } 

那么我使用这个公共静态布尔variables到我的欢迎活动类。 我正在使用许可协议页面。 我不得不一次在我的应用程序中使用,然后永远不会进一步显示每当我运行的应用程序。 所以我已经把欢迎活动的条件…如果欢迎类运行第一次,所以静态布尔variables为false …

  if (Appconfig.activity == false) { Intent intent = new Intent(); intent.setClass(WelcomeActivity.this,LicesnceActivity.class); startActivity(intent); WelcomeActivity.this.finish(); } if (Appconfig.activity == true) { Intent intent = new Intent(); intent.setClass(WelcomeActivity.this, MainActivity.class); startActivity(intent); } 

现在我在Licesnce Activity课上做了:

 Appconfig.activity=true; 

所以每当我运行应用程序的第二个活动“主要活动”后运行欢迎活动不是许可证活动….

在全球范围内宣布

  public int count=0 int tempInt = 0; 

首先在你的onCreate函数中通过这个代码。

  count = readSharedPreferenceInt("cntSP","cntKey"); if(count==0){ Intent intent = new Intent(); intent.setClass(MainActivity.this, TemporaryActivity.class); startActivity(intent); count++; writeSharedPreference(count,"cntSP","cntKey"); } 

过去这两种方法在onCreate之外

  //Read from Shared Preferance public int readSharedPreferenceInt(String spName,String key){ SharedPreferences sharedPreferences = getSharedPreferences(spName,Context.MODE_PRIVATE); return tempInt = sharedPreferences.getInt(key, 0); } //write shared preferences in integer public void writeSharedPreference(int ammount,String spName,String key ){ SharedPreferences sharedPreferences = getSharedPreferences(spName, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt(key, ammount); editor.commit(); } 

全球声明

 public int count=0; int tempInt = 0; 

第一个屏幕OnCreate

 count = readSharedPreferenceInt("cntSP","cntKey"); if(count==0){ Intent i = new Intent(SplashScreen.this, IntroActivity.class); startActivity(i); count++; writeSharedPreference(count,"cntSP","cntKey"); } else { Intent i = new Intent(SplashScreen.this, MainActivity.class); startActivity(i); // close this activity } 

现在外面的方法

 public int readSharedPreferenceInt(String spName,String key){ SharedPreferences sharedPreferences = getSharedPreferences(spName, Context.MODE_PRIVATE); return tempInt = sharedPreferences.getInt(key, 0); } //write shared preferences in integer public void writeSharedPreference(int ammount,String spName,String key ){ SharedPreferences sharedPreferences = getSharedPreferences(spName, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt(key, ammount); editor.commit(); }