android应用程序的流畅性问题和如何避免它们
2012-12-12 16:42
302 查看
即使你的应用程序是快速且响应灵敏的,但一些设计仍然会给用户造成问题——与其它程序和对话框没有事先计划的交互、意外的数据丢失、意料之外的阻塞等等。避免这些问题,有助于理解应用程序运行的上下文和系统的交互过程,而这些有正影响着你的应用程序。总而言之,应该竭尽全力去开发一个与系统和其他应用程序流畅加护的应用程序。
一个常见的流畅问题是:一个应用程序的后台处理——例如,一个Service或者BroadcastReceiver弹出一个对话框来响应一些事件。这可能看起来没啥大碍,尤其是在模拟器上单独的构建和测试你的应用程序的时候。然而,当你的应用程序运行在真机上时,有可能你的应用程序在没有获得用户的焦点时后台处理显示了一个对话框。因此,可能会出现在活跃的应用程序后方显示了你的应用程序对话框,或者从当前应用程序夺取焦点显示了一个对话框,然而不管当前用户正在做什么(例如:正在打电话)。那么这种行为,对应用程序或者用户来说,就是不应该出现的。
为了避免这些问题,你的应用程序应该使用合适的系统资源来通知用户——Notification。使用Notification,你的应用程序可以在状态栏显示一个icon来通知用户已经发生了事情,而不是夺取焦点和打断用户。
另一个流畅问题的例子是未能正确实现activity的onPause()和其他生命周期的方法而造成意外丢失了状态或用户数据。又或者,如果你的应用程序想暴露数据给其他应用程序使用,那么你应该通过ContentProvider来暴露,而不是通过一个可读的原始文件和数据库开实现。
下面将要讨论的常见的流畅问题以及如何避免它们:
1. 别丢弃数据
2. 不要暴露原始数据
3. 不要打断用户
4. 有太多事情要做? 在线程里做
5. 不要让一个activity超负荷
6. 扩展系统主题
7. 设计你的UI可以应付多屏幕分辨率
8. 假设网络很慢
9. 不要假定触摸屏或键盘
10. 节省设备电池
1)别丢弃数据
一定要记住android是一个移动平台。可以显而易见地说,其他activity可能会在任何时候弹出来覆盖你的activity,这个过程可能导致你的应用程序被杀死。
如果用户在你的应用程序中正在编辑数据时候,其他activity出现了,这时候,你的应用程序被杀死时可能丢失那些数据。当然了,除非你实现保存了正在进行的工作。android系统是这样做的:能接收和编辑用户输入的android应用程序应该重写onSaveInstanceState()方法,并以恰当的方式保存他们的状态。当用户重新访问应用程序时候,就能得到他的数据。
进行这种处理方式的最经典的例子mail应用程序。
2)不要暴露原始数据
如果你不想穿着内衣在大街上溜达的话,你的数据也不应该这样。如果暴露原始数据,要求其他应用程序能够理解你的数据的格式;如果你变更了格式,那么,你将破坏那些没有进行同步更新的应用程序。
android系统提供了这样一个方式,创建一个contentprovider,以一种清晰的、深思熟虑的和可维护的api方式暴露你的数据给其他应用程序。使用contentprovider,就好像插入java接口来分离和组装两片高耦合的代码。这意味着你可以修改数据的内部格式,而不用修改有contentprovider暴露出来的接口,这样不会英系那个其他应用程序。
3)不要打断用户
如果用户正在运行一个应用程序(例如正在打电话),那么,不要在BroadcastReceiver或者后台运行的Service中调用callActivity()。这么做会中断当前运行的应用程序,并导致用户恼怒。这样你的应用程序的命运就可想而知了。
不选择在后台直接创建activity UI,取而代之的是,应该使用NotificationManager来设置notification。他们会出现在状态栏里,并且用户可以在他们空闲的时候点击它们,来查看你的应用程序想他显示了什么。
当然,如果你的activity已经在前台了,以上将不适用,这样,对于用户的输入,用户期望的是看到下一个activity的响应。
4)有太多事情要做?在线程里做
如果应用程序需要执行一些耗时的计算的话,应该尽可能地将它挪到线程里。同时使用handler更新UI线程。
5)不要让一个activity超负荷
任何值得使用的应用程序都可能有几个不同的屏幕。当设计UI屏幕时候,请一定要使用多个activity对象实例。
6)扩展系统主题
当谈到UI感观时候,巧妙地交融非常重要。用户在使用与自己期望相反的UI的应用程序时候,会产生不愉快的感觉。当设计你的UI时,你应该尽量避免太多自己的主题。相反的,使用同一个主题。你可以重写或者扩展你需要的主题部分,但至少在与其他应用程序相同的布局基础上开始。
7)设计你的UI可以应对多屏幕分辨率
8)假设网络很慢
9)不要假定触摸屏或键盘
10)节省设备电量
一个常见的流畅问题是:一个应用程序的后台处理——例如,一个Service或者BroadcastReceiver弹出一个对话框来响应一些事件。这可能看起来没啥大碍,尤其是在模拟器上单独的构建和测试你的应用程序的时候。然而,当你的应用程序运行在真机上时,有可能你的应用程序在没有获得用户的焦点时后台处理显示了一个对话框。因此,可能会出现在活跃的应用程序后方显示了你的应用程序对话框,或者从当前应用程序夺取焦点显示了一个对话框,然而不管当前用户正在做什么(例如:正在打电话)。那么这种行为,对应用程序或者用户来说,就是不应该出现的。
为了避免这些问题,你的应用程序应该使用合适的系统资源来通知用户——Notification。使用Notification,你的应用程序可以在状态栏显示一个icon来通知用户已经发生了事情,而不是夺取焦点和打断用户。
另一个流畅问题的例子是未能正确实现activity的onPause()和其他生命周期的方法而造成意外丢失了状态或用户数据。又或者,如果你的应用程序想暴露数据给其他应用程序使用,那么你应该通过ContentProvider来暴露,而不是通过一个可读的原始文件和数据库开实现。
下面将要讨论的常见的流畅问题以及如何避免它们:
1. 别丢弃数据
2. 不要暴露原始数据
3. 不要打断用户
4. 有太多事情要做? 在线程里做
5. 不要让一个activity超负荷
6. 扩展系统主题
7. 设计你的UI可以应付多屏幕分辨率
8. 假设网络很慢
9. 不要假定触摸屏或键盘
10. 节省设备电池
1)别丢弃数据
一定要记住android是一个移动平台。可以显而易见地说,其他activity可能会在任何时候弹出来覆盖你的activity,这个过程可能导致你的应用程序被杀死。
如果用户在你的应用程序中正在编辑数据时候,其他activity出现了,这时候,你的应用程序被杀死时可能丢失那些数据。当然了,除非你实现保存了正在进行的工作。android系统是这样做的:能接收和编辑用户输入的android应用程序应该重写onSaveInstanceState()方法,并以恰当的方式保存他们的状态。当用户重新访问应用程序时候,就能得到他的数据。
进行这种处理方式的最经典的例子mail应用程序。
2)不要暴露原始数据
如果你不想穿着内衣在大街上溜达的话,你的数据也不应该这样。如果暴露原始数据,要求其他应用程序能够理解你的数据的格式;如果你变更了格式,那么,你将破坏那些没有进行同步更新的应用程序。
android系统提供了这样一个方式,创建一个contentprovider,以一种清晰的、深思熟虑的和可维护的api方式暴露你的数据给其他应用程序。使用contentprovider,就好像插入java接口来分离和组装两片高耦合的代码。这意味着你可以修改数据的内部格式,而不用修改有contentprovider暴露出来的接口,这样不会英系那个其他应用程序。
3)不要打断用户
如果用户正在运行一个应用程序(例如正在打电话),那么,不要在BroadcastReceiver或者后台运行的Service中调用callActivity()。这么做会中断当前运行的应用程序,并导致用户恼怒。这样你的应用程序的命运就可想而知了。
不选择在后台直接创建activity UI,取而代之的是,应该使用NotificationManager来设置notification。他们会出现在状态栏里,并且用户可以在他们空闲的时候点击它们,来查看你的应用程序想他显示了什么。
当然,如果你的activity已经在前台了,以上将不适用,这样,对于用户的输入,用户期望的是看到下一个activity的响应。
4)有太多事情要做?在线程里做
如果应用程序需要执行一些耗时的计算的话,应该尽可能地将它挪到线程里。同时使用handler更新UI线程。
5)不要让一个activity超负荷
任何值得使用的应用程序都可能有几个不同的屏幕。当设计UI屏幕时候,请一定要使用多个activity对象实例。
6)扩展系统主题
当谈到UI感观时候,巧妙地交融非常重要。用户在使用与自己期望相反的UI的应用程序时候,会产生不愉快的感觉。当设计你的UI时,你应该尽量避免太多自己的主题。相反的,使用同一个主题。你可以重写或者扩展你需要的主题部分,但至少在与其他应用程序相同的布局基础上开始。
7)设计你的UI可以应对多屏幕分辨率
8)假设网络很慢
9)不要假定触摸屏或键盘
10)节省设备电量
相关文章推荐
- 为避免 Android 应用程序发生异常错误应注意的一些问题
- Android开发教程:如何让应用程序自动更新的问题?
- Android高级开发第一讲--如何在Android应用中避免内存溢出OOM问题
- Android如何避免切换至SurfaceView时闪屏(黑屏闪一下)以及黑屏移动问题
- android中从手机添加联系人,如何避免重复添加的代码的问题
- 如何在Android应用当中避免内存溢出问题
- 编写多线程的Java应用程序-如何避免当前编程中最常见的问题
- Android应用程序如何避免内存泄漏以及如何检查泄漏原因
- 15个常见的Android问题和如何解决它们
- 如何在Android应用当中避免内存溢出问题
- Android开发中的ANR问题如何避免?
- 如何解决放到android /system/app 下的应用程序无限重启弹出“异常终止”的问题
- Android高级开发第一讲--如何在Android应用中避免内存溢出OOM问题
- 编写多线程的 Java 应用程序 如何避免当前编程中最常见的问题
- Android高级开发第一讲--如何在Android应用中避免内存溢出OOM问题
- 如何在应用程序中避免死锁问题?
- Android面试(二)ListView优化,ListView和Scrollview冲突问题,mvc模式,什么是ANR 如何避免它?
- 如何开始使用Android应用程序模板
- .如何避免Android内存泄漏
- Android 应用程序(APK) 如何获得系统签名权限 强制关闭程序(后台进程)