【问题标题】:How to change activity, when app is in the background当应用程序在后台时如何更改活动
【发布时间】:2016-02-11 13:23:49
【问题描述】:

我有一个应用程序,它应该在切换到其他活动之前运行一些加载(I/O 操作),这将显示加载的信息。我想在切换之前完整地加载信息,这会导致一些设计问题。我本可以使用AsyncTask 在后台运行东西,但从设计的角度来看,我不希望应用程序的整个上下文被泄露以响应结果。 Service 的概念看起来更符合我的需求。
因此,让我表示从设计角度无法解决的情况。应用程序启动,这会导致创建一些活动等等。这个创建了一个服务,它在后台执行 I/O 操作。完成后,应用程序将活动更改为指定的活动。问题是,我应该如何处理这种情况,当应用程序在后台时服务完成它的工作。作为一名程序员,我想让我的应用程序要么重新打开第一个活动并立即更改为以下活动,要么只是从“以下”活动开始。有什么想法吗?

【问题讨论】:

  • 您可以从您的服务中启动所需的活动。
  • 活动应该立即弹出,还是当用户返回应用程序时?不需要第一个选项。
  • 如果你从服务启动它会立即弹出。
  • 我添加了一个解决方案,用于仅在用户打开应用时才打开新活动的情况。

标签: android service android-asynctask


【解决方案1】:

我想让我的应用重新打开第一个活动并立即更改为以下活动

你可以这样。当您的服务中的处理完成时,像这样在SharedPreference 中保存一个值

Context ctx = getApplicationContext();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("LoadNewActivity", true); // or false
editor.commit();

现在在您的启动器活动中执行此操作onCreate()

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
boolean loadNewActivity = prefs.getBoolean("LoadNewActivity", false);
if(loadNewActivity) 
{
    Intent intent = new Intent(this, MyNewActivity.class);
    startActivity(intent);
}
else 
{
    // Do normal startup
}

【讨论】:

  • 有些解决方案比您想象的要简单。谢谢。
  • 好吧,事实上,I/O 操作在主线程中通常是一种不好的做法(写入首选项是一种),我对 atm 不满意。我出于同样的目的使用静态字段。我正在努力寻找更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多