当应用安装时只运行一次代码

31
我希望在我的应用程序中只运行一次代码,即第一次运行它(新安装的应用程序)。我该怎么做?有人能解释一下并给出代码吗?
实际上,在我的Android项目中,我只想在第一次运行时创建数据库并插入一些值。之后,该特定代码块不应再次运行。我如何通过SharedPreferences或Preferences实现此机制?
提供示例代码将更有帮助。
4个回答

47

在所有操作中,您可以使用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();
    }
}

你只需要在 AndroidManifest.xml 文件的 application 标签中添加 android:name=".App" 属性,即可使其生效。
<!-- other xml stuff -->

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

   <!-- yet another stuff like nextline -->
   <activity ... />
</application>

1
非常感谢,你的代码让我脱离了困境。 - Morton

16

你可以尝试:

@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();
}

在你的第一个活动中创建此代码,之后它将不再执行。


请在super.onCreate(savedInstanceState);之后添加以下内容: - pollaris

7

在这些情况下,我通常做以下事情:

    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 
    }

希望这可以帮助到您。

6

在您的应用程序中需要运行此代码的任何位置:

  1. 检查共享首选项中的布尔值firstTime是否为True
  2. 如果不是

    • 运行一次性代码
    • 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();
}

非常简单而且甜美的答案。谢谢伙计。 - Hemant Sankhla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接