仅启动一次活动

问题描述:

我希望我的应用只在应用第一次启动时才开始活动。 任何人有任何想法?仅启动一次活动

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

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

}

+2

它显示黑屏,因为没有加载没有布局(即没有'setContentView'),所以它显示一个空的窗口。 – Dave

当应用程序启动,该活动已经运行活动的喜好设置一个标志。默认您的设置为false,然后只在标志未设置时才启动该活动。请注意,如果用户清理应用程序数据,或者卸载它并稍后再次安装,则该活动将再次显示。

取决于“第一次”的含义。最简单的方法是将一些标志放入SharedPreferences中......但是可以保留一段时间。 ^^

您将需要一个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(); 
} 

如果你的意思是应该的onCreate只有一次调用时,“开始只有当应用程序启动一次”,你可以设置acitivty到singleInstance或singleTask在清单的launchMode。

+0

你确定吗?文档中说:“singleTask”和“singleInstance”模式在一个方面也有所不同:“singleTask”活动允许其他活动成为其任务的一部分,它始终是其任务的根源,但其他活动可以一个“单一实例”活动,另一方面,不允许其他活动成为其任务的一部分,这是该任务中唯一的活动。如果它启动了另一个活动,那么该活动将被分配给另一个任务 - 就像FLAG_ACTIVITY_NEW_TASK的意图一样。“ –

我认为你会谈论像“登录”页面这样的活动,你只会在应用程序的整个生命周期中启动一次。 对于这一点,你可以使用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(意向)来验证之前,你的活动从未推出://在这里恢复nbRepet的价值

..

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

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

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

在这个post看到我的回答,关于同样的问题。

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

这将做的工作适合你

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

} 
+0

This Worked for me。Thanks @ JRE.exe – NarenderNishad