【问题标题】:Call an activity only once in the app and show it again when the app restart after being killed在应用中只调用一次Activity,并在应用被杀死后重新启动时再次显示
【发布时间】:2013-04-17 17:36:27
【问题描述】:

我正在开发一个应用程序,我必须在应用程序生命周期中只显示一次活动。

我正在做的是在我的MainActivity.java 上调用Activity 1,所以当我进入我的应用程序之后,每当我回到MainActivity.java 时,我的Activity 1 就会被调用。我只想展示一次。

当用户杀死应用程序并重新启动它时,应该再次显示Activity 1

这是我在MainActivity.java 中所做的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    startActivity(new Intent(MainActivity.this,
                Activity1.class));

    }

我尝试过使用以下代码,但它只运行一次,在第一次安装应用程序时。

private boolean isFirstTime() {
    SharedPreferences preferences = getPreferences(MODE_PRIVATE);
    boolean ranBefore = preferences.getBoolean("RanBefore", false);
    if (!ranBefore) {
        // first time
        SharedPreferences.Editor editor = preferences.edit();
        editor.putBoolean("RanBefore", true);
        editor.commit();
    }
    return !ranBefore;
}

我怎样才能修改上面的代码,以满足我的要求。

我们将不胜感激。

【问题讨论】:

  • 您的意思是在应用程序生命周期中一次,还是在用户第一次启动应用程序时一次,以后再也不会?
  • 一旦只有用户启动了我想要显示活动的应用程序。如果用户在我的活动中移动并且他来到 MainActivity 我不想再次向用户显示 Activty1。而且,当用户退出应用程序并再次重新启动应用程序时,Activity1 将再次显示,直到并且除非他退出应用程序才显示 Activity1。

标签: android android-activity sharedpreferences


【解决方案1】:

您应该在onDestroy 中将ranBefore 设置为false

@Override
public void onDestroy() 
{
    SharedPreferences preferences = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putBoolean("RanBefore", false);
    editor.commit();
}

【讨论】:

  • 如何设置ranBefore为假?我应该把上面的代码放在private boolean isFirstTime() 或`if (!ranBefore)` 的什么地方?
  • 以上代码将ranBefore设置为false,将这些代码放入onDestroy()
  • 这对我不起作用。在我关闭我的应用程序并将其导航到另一个活动到 mainactivity 后,它再次重复,意图通过了。
  • 关闭应用是什么意思?当你关闭你的应用程序时,应用程序生命周期还没有结束吗?
  • 是的,应用程序的生命周期已经结束。但再次以不同的方式重复我的 prm。我只想显示一次Activity1,直到应用程序关闭为止。无论用户来MainActivity 多少次。当用户在退出应用程序后再次重新启动时,它会再次显示他Activity1,然后直到并且除非他在应用程序中,否则不要显示他。你收到我的问题了吗?
【解决方案2】:

改变

return !ranBefore

return ranBefore

在我看来,您总是返回相同的东西而不是您初始化的变量。此外,您可以直接在该方法中放入启动Activity 的代码。那么您甚至不必担心return 声明。在您更改 SharedPreferences 中的值后,它将永远不会再次运行它

编辑

您可以在onCreate() 中将您的SharedPreferences 值设置为false。如果您在去另一个时没有完成您的Activity,并且如果它是您的主要Activity,那么您可能不想在退出应用程序之前完成它

【讨论】:

  • 改变了这个,但没有解决我的问题。仍然会出现同样的情况。
  • 我只想显示 Activity1 一次,直到应用程序关闭为止。无论用户访问 MainActivity 多少次。并且当用户在退出应用程序后再次重新启动时,它会再次向他显示 Activity1,然后直到并且除非他在应用程序中,否则不要他。你收到我的问题了吗?
  • 仍然不适合我。我也尝试过强制停止,但没有成功。强制停止后,我的 Activity1 应该再次出现,但不,它没有出现。
  • 你能通过代码解释一下你在说什么吗?我会试试的。
【解决方案3】:

我已经使用SharedPreferences 解决了这个问题。我所做的是在 Splash 我在SP 中输入了一些值,在MainActivity 我检查了,如果值匹配显示活动,否则不要打开对话框。在keyCodeBack(),我已经清除了SP,这有助于我满足我的要求。

【讨论】:

    【解决方案4】:

    使用共享偏好..

    要终止活动,请在 onClick() 处使用 class.finish()..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多