Запустите фрагмент кода только один раз, когда приложение установлено

Я хочу запустить часть кода только один раз в своем приложении, и это когда я запускаю его в первый раз (недавно установленное приложение). Как я мог это сделать, может ли кто-нибудь объяснить, давая кусок кода.

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

Пример кода будет более полезным.


person Chintan Soni    schedule 25.02.2013    source источник


Ответы (4)


Прежде всего, вы можете использовать SQLiteOpenHelper. Это предпочтительный способ работы с базой данных. Этот класс имеет метод onCreate(SQLiteDatabase), который вызывается при первом создании базы данных. Я думаю, что это хорошо подходит вам.

Если вы хотите большей гибкости и логика вашего первого раза не связана только с базой данных, вы можете использовать образец, предоставленный ранее. Вам просто нужно поместить его в место запуска.

Есть 2 стартовых места. Если у вас есть только одно действие, вы можете поместить свой код в метод onCreate, поэтому он будет таким:

public void onCreate(Bundle savedInstanceState) {
  // don't forget to call super method.
  super.onCreate(savedInstanceState);

  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
  if (!prefs.getBoolean("firstTime", false)) {
    // <---- run your one time code here
    databaseSetup();

    // mark first time has ran.
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("firstTime", true);
    editor.commit();
  }
}

Не забудьте добавить декларацию активности в манифест, а также его фильтры намерений (действие = MAIN, категория = LAUNCHER).

Если у вас более одного действия и вы не хотите дублировать свою логику запуска, вы можете просто поместить свою логику инициализации в экземпляр приложения, который создается перед всеми действиями (и другими компонентами, такими как службы, широковещательные приемники, поставщики контента) .

Просто создайте такой класс:

public class App extends Application {

  @Override
  public void onCreate() {
    super.onCreate();

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    if (!prefs.getBoolean("firstTime", false)) {
      // <---- run your one time code here
      databaseSetup();

      // mark first time has ran.
      SharedPreferences.Editor editor = prefs.edit();
      editor.putBoolean("firstTime", true);
      editor.commit();
    }
}

Все, что вам нужно, чтобы это работало, помещается в тег application в атрибуте AndroidManifest.xml android:name=".App".

<!-- other xml stuff -->

<application ... android:name=".App">

   <!-- yet another stuff like nextline -->
   <activity ... />
</application>
person pepyakin    schedule 25.02.2013
comment
Большое спасибо, ваш код спас меня от мира. - person Morton; 10.05.2017

Вы можете попробовать:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
    boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
    SharedPreferences.Editor editor = wmbPreference.edit();

    if (isFirstRun){
       // Code to run once
       editor.putBoolean("FIRSTRUN", false);
       editor.apply();
}

Напишите это в своем первом действии при создании. Затем после того, как код не будет выполняться снова.

person Sanober Malik    schedule 25.02.2013
comment
то есть место после super.onCreate(savedInstanceState); - person pollaris; 27.09.2017

вот что я делаю в таких ситуациях:

    wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);


    isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);

    if (isFirstRun)
    {

        // Do your magic here

        SharedPreferences.Editor editor = wmbPreference.edit();
        editor.putBoolean("FIRSTRUN", false);
        editor.commit();
    }else{
        //what you do everytime goes here 
    }

надеюсь это поможет

person Driss Bounouar    schedule 26.02.2013

Везде, где вам нужно запустить этот код в вашем приложении:

  1. Проверьте, верно ли логическое значение firstTime в общих настройках.
  2. Если не

    • Run the one time code
    • Сохранить firstTime как true в общих настройках

Что-то вроде этого:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(!prefs.getBoolean("firstTime", false)) {
    // run your one time code here
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("firstTime", true);
    editor.commit();
}
person Anup Cowkur    schedule 25.02.2013
comment
Супер простой и милый ответ. Спасибо друг. - person Hemant Sankhla; 20.04.2020