不要阻止UI

5788538
我已经与许多最终用户讨论了他们写的糟糕的应用程序的不满之处,我得出的结论是,这与本机,跨平台甚至HTML无关。 这是令人沮丧的问题,这是由不直观的应用程序(隐藏的手势等)和缓慢的性能驱动的。

性能低下是最容易被误解的地方,人们抱怨它有一种呆滞感,但是当用户抱怨性能时,它通常与此无关,而是更平凡的事情……当用户抱怨性能时,它常常是无限的。旋转轮覆盖了整个UI(代号One中的InfiniteProgress对话框),这使它们像傻瓜一样站着等待着他们的电话让他们再次触摸它!

这很烦人,令人沮丧,我可以举出很多本机应用程序来对常规数据执行此操作!

当我们添加InfiniteProgress对话框时,该对话框仅适用于真正的阻止操作,例如登录。 但是,回头看,我可以看到我们在演示中也滥用了此功能,这可能激发了一些开发人员这样做。

本机应用程序具有的优势之一是可以缓存所有内容,我们始终可以显示本地缓存的数据并在后台进行提取。 我们可以指示数据以某种方式是过时的,或者在处理实时数据时没有连接,但是在可能的情况下我们不应该阻止用户。 您可以做一些琐碎的事情来指示进度,例如:

final Button performServerOp = new Button("Send Details");
performServerOp.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ev) {
      performServerOp.getParent().replace(performServerOp, new InfiniteScroll(), null);
      // async server call
    }
});

这自然是微不足道的,但是我们可以通过在本地缓存数据并编写在联机/脱机运行时无缝运行的代码来做进一步的工作。 诸如URLImage和ImageDownloadService之类的类可以变得非常方便,因为它们可以无缝处理此类情况。

您可以在组件顶部显示“陈旧”指示符,以表明您处于脱机模式或该组件包含尚未与服务器同步的更改,我们有时要做的一个技巧是将InfiniteScroll放置在组件顶部。指示它正在同步的组件。 重要的是不要过度执行此操作,因为InfiniteScroll会触发重新绘制,这将减慢应用程序的响应速度! 例如:

Container parent = new Container(new LayeredLayout());
FlowLayout fl = new FlowLayout(Component.RIGHT)l
Container infiniteContainer = new Container(fl);
infiniteContainer.addComponent(new InfiniteProgress());
parent.addComponent(componentThatsUpdating);
parent.addComponent(infiniteContainer);

即使您的应用程序受服务器限制,您也可以显示上次服务器连接中的最后一个UI表单。 这很关键,因为通常用户会检查他的设备以查看最后打开的东西,并且如果自上次运行以来该应用程序已挂起,他就不想重新开始更深入地研究设备的过程。

这不是一个新概念,尽管与同类产品相比,Palm Pilot的硬件性能相对较弱,但由于其出色的性能而非常成功。 Palm要求软件像硬件一样工作,当您按下物理按钮时,您希望即时获得满足,并且他们希望应用程序以相同的方式运行(公认的是,当时的应用程序通常不进行网络连接)。

翻译自: https://www.javacodegeeks.com/2014/11/dont-block-the-ui.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值