Detect First Run

后端 未结 4 674
我在风中等你
我在风中等你 2020-12-18 16:31

I am trying to detect if my app has been run before, by using this code:

(This is in my default Android activity)

@Override
public void onCreate(Bund         


        
相关标签:
4条回答
  • 2020-12-18 17:05

    The fact is that savedInstanceState holds persistent data across activities. As such if you restart the app, savedInstanceState will be null across runs. You should either use a Preference or some data base entry to keep track of your first run. I myself use a SharedPreference for this purpose.

    0 讨论(0)
  • 2020-12-18 17:18

    savedInstanceState is more for switching between states, like pausing/resuming, that kind of thing. It must always be created by you, also.

    What you want in this case is SharedPreferences.

    Something like this:

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

    I basically took this code directly from the documentation for Storage Options and applied it to your situation. It's a good concept to learn early.

    0 讨论(0)
  • 2020-12-18 17:29

    You may use a self-defined shared preference to archive your goal.

    0 讨论(0)
  • 2020-12-18 17:31

    savedInstanceState will be null if the app is not already loaded in memory. If you want to detect whether the app has run for the very first time, you have to apply different technique, such as using sharedPrefs / DB to store a property for the first run.

    i.e. Check sharedPrefs for property "firstRun"

    if exists, then it is not a first run

    else it is the first run

    set the firstRun property to true

    0 讨论(0)
提交回复
热议问题