【问题标题】:Detect First Run检测首次运行
【发布时间】:2012-10-07 02:47:51
【问题描述】:

我正在尝试使用以下代码检测我的应用是否曾运行过:

(这是我的默认 Android 活动)

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    if (savedInstanceState == null) {
        Log.w("activity", "first time");
        setContentView(R.layout.activity_clean_weather);
    } else {

        Log.w("activity", "second time");
        setContentView(R.layout.activity_clean_weather);
    }


 }

当我第一次运行应用程序时,它会显示第一次,当我第二次运行它时,第一次,第三次,第一次......

我使用的是实际的 Android 设备,但我不是每次都使用运行按钮。我使用 Eclipse 运行按钮运行应用程序一次,然后关闭应用程序并按下手机上的图标。

我的代码有问题吗?

【问题讨论】:

    标签: java android oncreate


    【解决方案1】:

    savedInstanceState 更适合在状态之间切换,比如暂停/恢复之类的。它也必须始终由您创建。

    在这种情况下你想要的是SharedPreferences

    类似这样的:

    public static final String PREFS_NAME = "MyPrefsFile"; // Name of prefs file; don't change this after it's saved something
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
    
        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); // Get preferences file (0 = no option flags set)
        boolean firstRun = settings.getBoolean("firstRun", true); // Is it first run? If not specified, use "true"
    
        if (firstRun) {
            Log.w("activity", "first time");
            setContentView(R.layout.activity_clean_weather);
    
            SharedPreferences.Editor editor = settings.edit(); // Open the editor for our settings
            editor.putBoolean("firstRun", false); // It is no longer the first run
            editor.commit(); // Save all changed settings
        } else {
            Log.w("activity", "second time");
            setContentView(R.layout.activity_clean_weather);
        }
    
    }
    

    我基本上直接从the documentation for Storage Options 获取了这段代码并将其应用于您的情况。早点学习是个好概念。

    【讨论】:

    【解决方案2】:

    您可以使用自定义的共享偏好来归档您的目标。

    【讨论】:

      【解决方案3】:

      事实上,savedInstanceState 持有跨活动的持久数据。因此,如果您重新启动应用程序,savedInstanceState 在运行中将为空。您应该使用Preference 或一些数据库条目来跟踪您的第一次运行。我自己为此使用了SharedPreference

      【讨论】:

        【解决方案4】:

        如果应用程序尚未加载到内存中,savedInstanceState 将为 null。如果您想检测应用程序是否第一次运行,您必须应用不同的技术,例如使用 sharedPrefs / DB 来存储第一次运行的属性。

        即检查属性“firstRun”的 sharedPrefs

        如果存在,则不是第一次运行

        否则是第一次运行

        将 firstRun 属性设置为 true

        【讨论】:

          猜你喜欢
          • 2013-02-17
          • 1970-01-01
          • 1970-01-01
          • 2012-06-07
          • 2017-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-29
          相关资源
          最近更新 更多