专用的Android Activity,用于初始化应用程序的数据和库

时间:2015-07-02 12:34:50

标签: java android android-activity initialization

我的应用程序使用各种繁重的库和数据文件,需要在启动时加载/同步本地存储。由于此操作需要一些时间,我正在考虑为此目的创建一个专门的活动。此活动将是应用程序的入口点,并将执行以下操作:

  • 显示背景图片和进度条
  • 处理必要的数据(并相应更新进度条)
  • 完成后,启动新活动

以下是几个问题:

  • 我的初始化活动需要将对数据的引用传递给其子活动。通常我会用setSerializable执行此操作,但在这里我使用的是第三方非可序列化类。

所以我想的只是简单地使数据静态化。这是一个好的解决方案吗?在切换活动时或在应用程序生命周期中,静态引用可能会中断吗?

public class LibraryInitializer {

   private static Some3rdPartyClass myLib;

   public static void initialize(){ // Called by initialization activity
      myLib = Some3rdPartyClass.create();
   }

   public static Some3rdPartyClass getMyLib(){ // Called by child activity
      return myLib;
   }
}
  • 我只需要调用一次初始化活动。当用户点击后退按钮时,如何防止再次显示?

更一般地说,这种做法是否正常,或者你会建议一个更好的方法? (我还考虑过使用一个活动,但动态添加/删除进度条和背景)

2 个答案:

答案 0 :(得分:2)

长时间运行的代码确实应该使用Android services来完成。我建议您在一个服务中执行复杂的逻辑,您的各种“活动”类(对应于您的应用程序的视图)只是消耗。服务可以比应用程序的UI更长,也可以响应各种其他事件(如系统启动)启动/初始化,即使用户没有与应用程序交互,而活动与表示紧密地交织在一起。

在加载/同步数据方面,我强烈建议不要将此逻辑放在您的活动代码中......而是使用SyncAdapter或其他一种调度机制进行同步。这将确保同步活动与网络芯片的其他用途进行批处理,从而最大限度地减少整体电池使用量,并且还允许您在用户主动使用您的应用程序之前同步,这样您就不会让用户等待他们打开你的应用程序。

答案 1 :(得分:1)

当您从加载Activity启动一个新的Activity时,调用finish()方法来关闭该活动,它将从应用程序活动堆栈中删除。如下所示:

startActivity(intent);
finish();

对于通过活动传递数据的问题,请扩展Android Application类,您可以在其中定义应用程序的全局状态和变量。