2012-10-07 48 views
1

我想检测是否我的应用程序已经运行之前,通过使用此代码:检测首次运行

(这是我的默认的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运行按钮运行一次应用程序,然后关闭应用程序并按下手机上的图标。

我的代码有问题吗?

回答

10

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并将其应用到你的情况。早期学习是一个很好的概念。

+0

这是很棒的!非常感谢! :D – foobar5512

+0

我对此一点也不确定,以及https://developers.google.com/app-invites/android/guides/app建议如果没有savedInstanceState,这将是该活动的第一次启动。我想,检查sharedPreferences反而更安全。 – Simon

0

您可以使用自定义的共享首选项来归档您的目标。

0

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

0

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

即财产“firstRun”

检查sharedPrefs如果存在,那么它是不是第一次运行

否则它是第一次运行

设置firstRun属性为true