【问题标题】:SlpashScreen/Performance: Proper way to initialize application data during startup especially using a SlpashScreenSlpashScreen/Performance:在启动期间初始化应用程序数据的正确方法,尤其是使用 SlpashScreen
【发布时间】:2014-01-06 03:34:14
【问题描述】:

我正在尝试一个 java 桌面应用程序(我是一名学生)。

启动时要处理四种数据:

1)项目树(如eclipse项目树)查看数据。

目前我使用 XMLEncoder/XMLDecoder 来保存和从 XML 文件重新加载。

2) 用户偏好数据。比如字体,最近的文件等等。

目前我正在使用 java.util.prefs.Preferences。

3)类数据。一些工厂类如MenuFactory,util类如DatabaseUtil,FileUtil等它们有一些静态数据。

目前我在这些类中使用静态初始化器来初始化默认数据。

4)数据库相关信息,如连接配置、常用数据库名、表名等。

目前我正在使用 java.util.Properties;

我想改进的地方:

1) 上述四种保存我的应用数据的方法是否正确?

2)由于要加载的数据太多,在启动画面时我应该怎么做。

在启动时加载它们还是延迟到使用它们的时间?

至少,我不想通过以下代码欺骗用户(不在有意义的时间更新进度条):

SwingWorker<Void, Integer> worker = new SwingWorker<Void, Integer>() {

            @Override
            protected Void doInBackground() throws Exception {

                for (int i = 0; i < 50; i++) {
                    Thread.sleep(100);// Simulate loading
                    publish(i*2);// Notify progress
                }
                return null;
            }

3) 我认为太多的静态初始化器可能会减慢程序的启动速度,有什么建议吗?

【问题讨论】:

  • 不知道你说的欺骗用户是什么意思,但是为什么不做大多数程序做的事情,让启动屏幕有一个JProgressBar显示初始化的进度,一旦一切都完成了,使程序屏幕可见。
  • 谢谢,您的意思是一次加载 doInBackground 中的数据而忽略 SwingWorker [ process(List chunks)] ?但是这样一来,进度条就冗余了,能不能做个类似eclipse的东西,加载数据,在有意义的时间通知进度条?
  • 绝对可以。相应地更新进度
  • 再次感谢,真正让我困惑的是,如果我们想在有意义的时间通知进度条,我们必须使用作业列表传递给 SwingWorker 流程​​方法,但每个作业都不是同样,我应该为每个作业使用函数指针吗?还是其他方式?
  • 你可以看看this例子

标签: java eclipse startup splash-screen


【解决方案1】:

如果您的应用面向高端设备,那么您当然可以在启动/启动屏幕期间加载大部分应用。

但是当您拥有低端设备和目标设备时,问题就来了。对于一些低端设备来说,在启动时加载过多数据会为其他处理留下非常少的内存。一些 imd 甚至导致崩溃。

因此,您必须明智地做出决定,如果它是一些小数据,那么最好根据需要或在加载该屏幕时离开加载。

【讨论】:

    猜你喜欢
    • 2020-07-26
    • 2015-04-20
    • 1970-01-01
    • 2014-10-18
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    相关资源
    最近更新 更多