专用 Android Activity 为应用程序初始化数据和库
Dedicated Android Activity to initialize data and libraries for the application
我的应用程序使用各种繁重的库和数据文件,需要在启动时加载/与本地存储同步。由于此操作需要一些时间,因此我正在考虑为此目的创建一个专用的 activity。此 activity 将是应用程序的入口点,并将执行以下操作:
- 显示背景图片和进度条
- 处理必要的数据(并相应地更新进度条)
- 完成后,启动一个新的 activity
这里有几个问题:
- 我的初始化 activity 需要将对数据的引用传递给它的子 activity。通常我会使用
setSerializable
来执行此操作,但在这里我使用 3rd-party 不可序列化 类。
所以我想简单地使数据静态化。这是一个好的解决方案吗?在切换活动时或在应用程序生命周期期间,静态引用是否有可能中断?
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;
}
}
- 我只需要调用一次初始化 activity。当用户点击后退按钮时,如何防止它再次显示?
更一般地说,这种方法可以吗,或者您会建议更好的方法吗? (我也考虑过使用一个 activity,但是 adding/removing 进度条和背景是动态的)
当您从加载中启动一个新的 Activity 时 Activity 调用 finish() 方法关闭那个 activity 并且它将从应用程序中删除 activity堆。如下所示:
startActivity(intent);
finish();
对于通过活动传递数据的问题,扩展 Android 应用程序 class,您可以在其中定义应用程序的全局状态和变量。
长 运行 代码确实应该使用 Android services 来完成。我建议在您的各种 "Activity" 类(对应于您的应用程序的视图)简单使用的服务中执行复杂的逻辑。服务可以比应用程序的 UI 寿命更长,也可以启动/初始化以响应各种其他事件(如系统启动),即使用户没有与应用程序交互,而 Activity 非常与演示文稿紧密结合。
在加载/同步数据方面,我强烈建议不要将此逻辑放入您的 activity 代码中...而是使用 SyncAdapter 或其他调度机制之一进行同步.这将确保同步 activity 与网络芯片的其他用途分批进行,从而最大限度地减少整体电池使用量,并且还允许您在用户主动使用您的应用程序之前进行同步,这样您就不会保留用户在打开您的应用时等待。
我的应用程序使用各种繁重的库和数据文件,需要在启动时加载/与本地存储同步。由于此操作需要一些时间,因此我正在考虑为此目的创建一个专用的 activity。此 activity 将是应用程序的入口点,并将执行以下操作:
- 显示背景图片和进度条
- 处理必要的数据(并相应地更新进度条)
- 完成后,启动一个新的 activity
这里有几个问题:
- 我的初始化 activity 需要将对数据的引用传递给它的子 activity。通常我会使用
setSerializable
来执行此操作,但在这里我使用 3rd-party 不可序列化 类。
所以我想简单地使数据静态化。这是一个好的解决方案吗?在切换活动时或在应用程序生命周期期间,静态引用是否有可能中断?
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;
}
}
- 我只需要调用一次初始化 activity。当用户点击后退按钮时,如何防止它再次显示?
更一般地说,这种方法可以吗,或者您会建议更好的方法吗? (我也考虑过使用一个 activity,但是 adding/removing 进度条和背景是动态的)
当您从加载中启动一个新的 Activity 时 Activity 调用 finish() 方法关闭那个 activity 并且它将从应用程序中删除 activity堆。如下所示:
startActivity(intent);
finish();
对于通过活动传递数据的问题,扩展 Android 应用程序 class,您可以在其中定义应用程序的全局状态和变量。
长 运行 代码确实应该使用 Android services 来完成。我建议在您的各种 "Activity" 类(对应于您的应用程序的视图)简单使用的服务中执行复杂的逻辑。服务可以比应用程序的 UI 寿命更长,也可以启动/初始化以响应各种其他事件(如系统启动),即使用户没有与应用程序交互,而 Activity 非常与演示文稿紧密结合。
在加载/同步数据方面,我强烈建议不要将此逻辑放入您的 activity 代码中...而是使用 SyncAdapter 或其他调度机制之一进行同步.这将确保同步 activity 与网络芯片的其他用途分批进行,从而最大限度地减少整体电池使用量,并且还允许您在用户主动使用您的应用程序之前进行同步,这样您就不会保留用户在打开您的应用时等待。