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


 }

アプリを初めて実行すると、初めて、2 回目に実行すると、最初に、3 回目には初めてと表示されます....

私は実際の Android デバイスを使用しており、毎回実行ボタンを使用していません。Eclipse の実行ボタンでアプリを 1 回実行してから、アプリを閉じて、携帯電話のアイコンを押します。

私のコードに何か問題がありますか?

4

4 に答える 4

12

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

}

基本的に、ストレージ オプションのドキュメントからこのコードを直接取得し、状況に適用しました。早い段階で学ぶのは良い概念です。

于 2012-10-07T02:53:46.167 に答える
0

自分で定義した共有設定を使用して、目標をアーカイブすることができます。

于 2012-10-07T02:51:49.850 に答える
0

実際には、savedInstanceStateアクティビティ間で永続的なデータが保持されます。そのため、アプリを再起動すると、savedInstanceState実行全体で null になります。Preference最初の実行を追跡するには、データベース エントリを使用する必要があります。私自身SharedPreference、この目的のために a を使用しています。

于 2012-10-07T02:54:31.523 に答える
0

savedInstanceStateアプリがまだメモリにロードされていない場合は null になります。アプリが初めて実行されたかどうかを検出する場合は、sharedPrefs / DB を使用して最初の実行のプロパティを保存するなど、別の手法を適用する必要があります。

つまり、プロパティ「firstRun」のsharedPrefsを確認します

存在する場合、それは最初の実行ではありません

それ以外の場合は最初の実行です

firstRun プロパティを true に設定します

于 2012-10-07T02:54:52.810 に答える