仅启动一次活动

时间:2011-09-08 15:59:08

标签: android android-activity launch

我希望我的应用仅在应用首次启动时启动活动。 任何人都有任何想法?

我发现了这个,但它只显示黑屏。

public class WhatsNew extends Activity {

public static final String PREFS_NAME = "MyPrefsFile";

protected void onCreate(Bundle state){

       super.onCreate(state);
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       boolean dialogShown = settings.getBoolean("dialogShown", false);

       if (!dialogShown) {
         // AlertDialog code here

         SharedPreferences.Editor editor = settings.edit();
         editor.putBoolean("dialogShown", true);
         editor.commit();    
       }
    }

}

7 个答案:

答案 0 :(得分:3)

当应用启动时,在活动首选项中设置一个已经运行活动的标志。将您的设置默认为false,然后仅在未设置标志时启动该活动。请注意,如果用户清除您的应用程序数据,或将其卸载并稍后再次安装,则活动将再次显示。

答案 1 :(得分:3)

我认为您谈论的是“日志”页面等活动,您只需在应用程序的整个生命周期中启动一次。 为此,您可以使用sharedPreferences:

SharedPreferences prefs;
SharedPreferences.Editor editor;

在你的startActivity(意图)之下,你添加:

prefs = getSharedPreferences("nbRepet",Context.MODE_PRIVATE);
editor = prefs.edit();
editor.putInt("nbRepet", 1);
editor.commit();

现在你的变量nbRepet的值为1。

之后,您可以将这些行添加到您的startActivity(intent)之上,以验证您的活动之前从未启动过:

//在这里你恢复了nbRepet的值..

preferences = MainActivity.this.getSharedPreferences("nbRepet", MODE_PRIVATE);      
int value = preferences.getInt("nbRepet", 0);

// ..然后验证您的活动是否在之前启动。

if(value<1)
{
    startActivity(intent);
}

答案 2 :(得分:2)

您需要一个检查持久化布尔值的Activity。即,

onCreate(Bundle bundle)
{
    boolean firstRun = // persistance method here
    Intent toForward;
    if(firstRun)
        // Create an intent to start you "only once" activity
        // persist "firstRun" as false;
    else
        // Create an intent for your usual startup
    startActivity(toForward);
    finish();
}

答案 3 :(得分:2)

这将为你完成工作

package com.example.startup;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_main); //we don't need this line
    SharedPreferences settings=getSharedPreferences("prefs",0);
    boolean firstRun=settings.getBoolean("firstRun",false);
    if(firstRun==false)//if running for first time
      {
        SharedPreferences.Editor editor=settings.edit();
        editor.putBoolean("firstRun",true);
        editor.commit();
        Intent i=new Intent(MainActivity.this,Second.class);//Activity to be     launched For the First time 
        startActivity(i);
        finish();
    }
    else
    {
        Intent a=new Intent(MainActivity.this,Main.class);//Default Activity 
        startActivity(a);
        finish();
    }
   }

}

答案 4 :(得分:0)

取决于“第一次”的含义。最简单的方法是在SharedPreferences中添加一些标志......但是这可以保持一段时间。 ^^

答案 5 :(得分:0)

如果你的意思是在“启动应用程序时只启动一次”时只应调用onCreate一次,你可以将活动的launchMode设置为清单中的singleInstance或singleTask。

答案 6 :(得分:0)

请参阅此post中有关同一问题的答案。

我建议在onResume()内检查SharedPreference值是否先前已经运行过应用程序。