Начать операцию только один раз

Я хочу, чтобы мое приложение запускало активность только при первом запуске приложения. Кто-нибудь понял?

Я нашел это, но он показывает только черный экран.

public class WhatsNew extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean dialogShown = settings.getBoolean("dialogShown", false); if (!dialogShown) { // AlertDialog code here SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("dialogShown", true); editor.commit(); } } 

}

Я думаю, что вы говорите о таких действиях, как «журнал», который вы запускаете только один раз в своей жизни. Для этого вы можете использовать sharedPreferences:

 SharedPreferences prefs; SharedPreferences.Editor editor; 

И ниже вашего startActivity (намерения) вы добавляете:

 prefs = getSharedPreferences("nbRepet",Context.MODE_PRIVATE); editor = prefs.edit(); editor.putInt("nbRepet", 1); editor.commit(); 

Теперь ваша переменная nbRepet имеет значение 1.

После этого вы можете добавить эти строки ВЫШЕУ начало своей активности (намерения), чтобы убедиться, что ваша деятельность никогда не запускалась раньше:

// здесь вы восстанавливаете значение nbRepet.

 preferences = MainActivity.this.getSharedPreferences("nbRepet", MODE_PRIVATE); int value = preferences.getInt("nbRepet", 0); 

// .. и вы проверяете, была ли ваша активность запущена раньше.

 if(value<1) { startActivity(intent); } 

Когда приложение запускается, установите флаг в настройках активности, которые уже запущены. По умолчанию ваш параметр равен false, а затем запустите только эту активность, если флаг не установлен. Обратите внимание, что если пользователь очищает данные вашего приложения или удаляет его, а затем снова устанавливает его, активность снова будет отображаться.

Вам понадобится Activity, которая проверяет сохраненное логическое значение. т.е.

 onCreate(Bundle bundle) { boolean firstRun = // persistance method here Intent toForward; if(firstRun) // Create an intent to start you "only once" activity // persist "firstRun" as false; else // Create an intent for your usual startup startActivity(toForward); finish(); } 

Это сделает вам работу

 package com.example.startup; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); //we don't need this line SharedPreferences settings=getSharedPreferences("prefs",0); boolean firstRun=settings.getBoolean("firstRun",false); if(firstRun==false)//if running for first time { SharedPreferences.Editor editor=settings.edit(); editor.putBoolean("firstRun",true); editor.commit(); Intent i=new Intent(MainActivity.this,Second.class);//Activity to be launched For the First time startActivity(i); finish(); } else { Intent a=new Intent(MainActivity.this,Main.class);//Default Activity startActivity(a); finish(); } } } 

Зависит от того, что означает «первый раз». Самый простой способ – поместить некоторый флаг в SharedPreferences … но это может остаться на некоторое время. ^^

Если вы имеете в виду, что onCreate следует вызывать только один раз, когда «запускать только один раз, когда приложение запущено», вы можете установить startMode of acitivty в singleInstance или singleTask в манифесте.

См. Мой ответ в этом сообщении , касающийся этой же проблемы.

Я рекомендую проверить значение SharedPreference для того, было ли приложение ранее запущено, внутри onResume ().