文档章节

从Android开发中学到一些东西

ilxlf
 ilxlf
发布于 2013/10/14 21:32
字数 729
阅读 44
收藏 0

    本人从事java服务器端开发已经有6,7年了,最近这一年多转去做Android开发。到今天觉得应该把自己的一些感受写下来,供以后参考。

    1. Java bean的定义

        我们一般定义一个java bean,都是用如下的代码:

public class User {
    private String name;
  
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
}

        在Android开发中,我们一般这样定义一个java bean:

public class User {
    public String name;
}

        在Android的官方开发文档中这样说到:

In native languages like C++ it's common practice to use getters (i = getCount()) instead of accessing the field directly (i = mCount). This is an excellent habit for C++ and is often practiced in other object oriented languages like C# and Java, because the compiler can usually inline the access, and if you need to restrict or debug field access you can add the code at any time.
        而对Android开发来说:
However, this is a bad idea on Android. Virtual method calls are expensive, much more so than instance field lookups. It's reasonable to follow common object-oriented programming practices and have getters and setters in the public interface, but within a class you should always access fields directly.

        没有JIT的话,直接访问成员的速度是通过getter/setter访问速度是3倍。有JIT的话,这个数字是7倍。

    2. 尽量少的创建临时对象,尽量使用基本类型

        在服务器端开发的时候,我们很少会注意这个问题。但是在Android开发中,这些就是我们必须要留意。我个人认为我们在服务器端开发的时候,也可以应用这个原则。

        因为Android内存受限,减少内存分配,就意味着减少不必要的垃圾回收,进而可以避免App在使用中出现停顿等现象。

        比如说方法的返回值能用基本类型的表示的,就不要用一个java bean来表示;能用一个基本类型的数组表示的,就不要用一个java bean数组来表示。

   3. 不要用反射,除非无路可走。

        这个对App的性能是一个非常大的损耗。除非是为了App开发中为了OS不用版本的兼容性而使用反射。

   4. 使用最小的空间来存储更多的数据

        通过学习和使用,Android里面有一种非常高效的数据存储方式:

public void writeToParcel(Parcel dest, int flags) {
    dest.writeLong(time);
    int bat = (((int)cmd)&0xff)
                 | ((((int)batteryLevel)<<8)&0xff00)
                 | ((((int)batteryStatus)<<16)&0xf0000)
                 | ((((int)batteryHealth)<<20)&0xf00000)
                 | ((((int)batteryPlugType)<<24)&0xf000000);
    dest.writeInt(bat);
}

        Android用一个int存储了5个数据项。这段代码来自于Android 存储电池历史文件源代码。这段代码给我了很多的启示。当我们想把一些数据存储在文件中,就可以用这种方式:紧凑,快速。

最后一个是选择了一个新的IDE: Android Studio和Intellij Idea。用了新的IDE之后,开发效率确实提高了不不少,而且心情也愉悦了很多。

© 著作权归作者所有

ilxlf
粉丝 22
博文 57
码字总数 21697
作品 0
朝阳
架构师
私信 提问
20个帮助提高开发技巧的开源 Android App

学习的最好方法是阅读,对于开发人员也是如此。如果你想成为一个更好的开发人员,你必须阅读更多的代码。 就这么简单。 书籍、博客、论坛在某种程度上都是不错的,但一些功能齐全的详解的开源...

oschina
2017/05/17
4.4K
5
Android 通过分析Laucher源码整理添加快捷方式的思路

在实际开发中,实际上有很多功能或者设计我们都可以借鉴一下安卓源码, 在我写的这个Laucher系列里,就关于分析Laucher源码来开发桌面快捷方式的思路我大概整理了一下. 希望大家看了之后再遇到...

长平狐
2012/09/03
723
0
android源码分析网上随笔记录

百度查“android源码分析工具”时发现有一篇知乎文章:巨人的肩膀 其它

whoisliang
2018/03/22
0
0
30+关于如何成为更好Android开发者的短小而专业的建议

本文讲的是30+关于如何成为更好Android开发者的短小而专业的建议,成为一个Android开发者容易,成为一个成功而又出色的Android开发者难。要达此成就需要许多努力,激情,付出与毅力。 我无法...

乐乎无趣
2017/11/06
0
0
给 Android 开发者的 31 个 Pro 版进阶小贴士

成为 Android 开发人员很容易,但成为一名成功的 Android 开发人员,并从中脱颖而出并不容易。要做到这一点,需要付出很多努力、激情、奉献和毅力。 并没有快速的方法方式或简单的方式让我可...

oschina
2017/09/13
3.9K
9

没有更多内容

加载失败,请刷新页面

加载更多

UserInputControls用户输入控制

enum UserInputControls { kGovernedByOrthoMode = 0x0001,//正交模式管理 kNullResponseAccepted = 0x0002,//允许输入空 kDontEchoCancelForCtrlC = 0x0004,//ctrl C 模式不能重复......

一个小妞
20分钟前
0
0
分布式系统的事务处理

当我们在生产线上用一台服务器来提供数据服务的时候,我会遇到如下的两个问题: 1)一台服务器的性能不足以提供足够的能力服务于所有的网络请求。 2)我们总是害怕我们的这台服务器停机,造成...

群星纪元
22分钟前
2
0
Kanban VS Scrum:哪个是最好的敏捷项目管理框架

“我们使用敏捷开发。”在与软件开发团队交流时,你会听到很多这样的说法。根据统计,2018年全球约有90%的开发人员在使用敏捷开发。Choerodon猪齿鱼团队也是其中之一。 但是,敏捷并不统一。...

Choerodon
26分钟前
0
0
vue select 慢一步

我在使用vue的select的时候,@change事件里面,写一个axios拿到数据,然后修改某个变量,按理修改变量会立即呈现在页面上面,但实际情况是,值是变更了,但是页面上的效果慢了一步,非常奇怪...

朝如青丝暮成雪
31分钟前
0
0
分布式架构 核心知识体系

1.问题 1、何为分布式何为微服务? 2、为什么需要分布式? 3、分布式核心理论基础,节点、网络、时间、顺序,一致性? 4、分布式是系统有哪些设计模式? 5、分布式有哪些类型? 6、如何实现分...

小刀爱编程
33分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部