仅启动一次活动
我希望我的应用只在应用第一次启动时才开始活动。 任何人有任何想法?仅启动一次活动
我发现这个,但它只显示黑屏。
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();
}
}
}
当应用程序启动,该活动已经运行活动的喜好设置一个标志。默认您的设置为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。
你确定吗?文档中说:“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);
}
这将做的工作适合你
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();
}
}
}
This Worked for me。Thanks @ JRE.exe – NarenderNishad
它显示黑屏,因为没有加载没有布局(即没有'setContentView'),所以它显示一个空的窗口。 – Dave