首页
社区
课程
招聘
[原创]初学者开发 Android 的一些提示
发表于: 2011-6-17 01:19 30119

[原创]初学者开发 Android 的一些提示

2011-6-17 01:19
30119

初学者开发 Android 的一些提示

[序]

大家好,对于 android 开发感兴趣的兄弟们,都希望尽快入门,了解它的原理并开发出受欢迎的 App (不论是不是为了赚钱) 。如果你对 Android 编程完全没有认识,这篇文章便适合你。

[准备开发工具]

你可以使用一般的 Win XP。开发 android app 的基本工具,是一个官方最新版的 Android SDK ,一个 Eclipse IDE 编写工具,和一个 Eclipse 的 ADT 插件。

Android SDK = 提供了最核心的 compiler toolchain,它包含了编译器和一些例子程序源码,你可以阅读这些源码来学习 android

Eclipse = 这是一个编写源码的开发环境。大家写 Java / C / PHP 都使用它。免费,方便。

Eclipse ADT =  这是 google 开发给 Eclipse 的 android 开发插件,安装 eclipse 后便根据指引,安装这个插件。

依次序安装了以上的东西,便可以开始开发了。

[编程的注意事项]

由一个 hello world 开始 (假设你成功了),你即将踏入这个陌生的环境。Android app 和我们熟悉的 Windows exe (来看雪的兄弟们,我相信都是很熟悉 exe 开发了) ,有甚么明显的分别  ?

1.        Android 的 app 并不会终止运行。意思是,我们一般计算机的 exe,可以透过使用者按关闭,关闭后便不会占用资源。但是,手机平台的 app 并不会这样,大家不会看见 app 的介绍有 X 的按钮。原因是所有 android 的 app 被切换离开后, app 便会暂时停止运作 (suspend),并且后退到背景中。也是说, android 上所有启动过的 app,都会排列在背景中 (你可以透过系统工具查看)。它们并不会占用 CPU,你不需要介意它们的存在。这个设计,是因为手机开发商认为使用者将会不停地重复使用某几个 app,如果每一次都终止和重新开始,这样太浪费系统时间了。

它们所占用的内存,在系统有需要时,会被系统收回,这是一种被动式的 GC (回收) 设计。当一个 app 被系统收回内存或重新启动, app 的设计者都可以进行一些处理动作 (一般的 Listener 设计)

2.        一个 App 的生存周期,跟计算机的 exe 十分不同。 Exe 的生命,包含 4 种阶段,分别是启动,前景,背景,和离开。可是,一个 App 的生命复杂很多,这也是一般 android 开发者感觉最奇怪的地方。

不要认为你可以编写一个由头至尾 (像一个 dos exe,由头执行到尾) 的简单程序。这是在 java 中不可能,在 android 世界中更加不可能。你的 app 程序架构里,需要为每一种特定情况,作出相对的反应。这就是 app 的设计模式。

手机的硬件世界,是一个十分严格的多任务作业 (multithread) 世界。意思是,在任何时候,你的程序都会受到不能抵抗的中断 (interrupt),例如,当你的程序正在制造动画效果的时候,或正在运算一个 game 子弹的射击,突然手机收到来电了,你的程序被退后,切换到接来电的接口。使用者必须得到非常稳定的来电中断并顺利在短时间内完成,让使用者可以接听来电。你的程序,不管正在进行甚么,都要停下来。并且,安全地停下来‧

因此,android 的 app,使用了 Activity 的设计,来代表每一个生命的周期。简单说,你的 app 是一个Activity。 (extends 了它的 class)

Activity 将会遇到各种状况,包括了

     protected void onCreate();

     protected void onStart();
     
     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();

从名字便可以知道它的意思,例如当你的 app 第一次开动的时候,便会运行 onCreate 了。

学习 android 编程,不能避免要清楚了解 Activity。

[在 android 世界的 printf ]

如果你跟我一样,都是习惯了多年的 printf 来进行 debug 的工作,那么,你可以用 Log.e( )

例如 Log.e( "aaa" , "hello" )

        [被迫使用的多线设计]

        假如你想显示一个 Progress bar (进度棒),然后按完成的工作来显示进度,你便需要建立新的 Thread,不能逃避。

假如你有一个复杂计算,需要 10 秒,你不想你的 app 完全凝固没有任何反应 (被使用者以为是弄坏了),你便需要 Thread,也是不能逃避。

在 android 里,甚么东西都需要使用 thread,独立运行的 thread,进行各种工作,计算,网络,传送。其中一个原因,是 android 硬性规定了,只可以由 Main Thread (程序一开始时的第一个 thread) 来进行 UI (接口) 更新动作。所有更新如果来自其它 thread,便会发生异常错误。而且,更严重的问题是,所有 UI 的更新,都不会实时发生,必须等待到你现在的主线程,回到系统去,UI 更新才会执行

以下代码是失败的 :

Calc_step_one();
Update_bar( 1 );
Calc_step_two();
Update_bar( 2 );

这个设计,只会在 Calc_step_two 也完成计算后,完全离开这个 method 后,Bar 的更新才会出现到手机的屏幕,在此之前,手机的屏幕不会显示 (1) 和 (2) 的更新

所以,你会遇到一些很古怪的,像 postInvalidate()  这种东西。对于各位精于系统编程的兄弟们,这种非直观的 UI 关系,会带来一点烦恼

[善用 Java 的灵魂,虽然你不喜欢它]

大家如果平日不常写 java,必定会在想 : 甚么是 Interface ,  Anonymous Class , Inner class, extends,  etc,那些是甚么鬼。 不要逃避学习它们,假如你的程序设计里不使用 java 自身的一些设计特性,你会遇到很多烦恼,也会浪费很多气力。

把你以往的武功招式,忘记吧,学习 Java 的武功 !

---
夜了,下一次再谈
riijj


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (23)
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵 睡前来看看
2011-6-17 02:36
0
雪    币: 72
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
谢谢,半夜用手机看完了,挺舒服的,支持riijj
2011-6-17 03:02
0
雪    币: 1685
活跃值: (714)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
都走手机路线了,
2011-6-17 03:42
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
riijj说得很透彻
2011-6-17 06:31
0
雪    币: 270
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习了不少东西。
2011-7-5 10:28
0
雪    币: 114
活跃值: (81)
能力值: (RANK:60 )
在线值:
发帖
回帖
粉丝
7
恩,说得很好。如果需要使用C、C++来开发的话,就需要用到Android NDK。
如果使用NDK开发的话,可以看一下论坛里面关于NDK的资料!
2011-7-5 21:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
还是挺好的,,
2011-7-11 23:57
0
雪    币: 390
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
看来学习编程开发,还是要有很多东西学习的。
很久没编程了,遗忘很多了。
2011-8-11 11:56
0
雪    币: 223
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
真是学无止境啊
2011-9-6 15:49
0
雪    币: 400
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
营养贴……可以学习有下……
2011-10-26 20:20
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
在初学阶段看到这个,感觉很有收益!谢谢楼主。
2012-6-13 07:09
0
雪    币: 1270
活跃值: (109)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
这个学习一下。
2012-8-30 09:58
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
确实要遗忘以前的武功,学习JAVA武功
2012-9-25 01:55
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主写得很清楚,谢谢
2012-12-4 11:58
0
雪    币: 108
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学无止境啊 !!
2012-12-6 15:12
0
雪    币: 3572
活跃值: (760)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
嗯。都很对。。支持
2012-12-10 00:40
0
雪    币: 32
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
学习学习。。
2012-12-11 11:03
0
雪    币: 2329
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
Mark ,有道理,学习一下~
2013-1-16 16:55
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
有用。过来看看并学习。
2013-4-26 15:48
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
好文章,学习了
2013-5-3 12:22
0
雪    币: 202
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
楼主写得很透彻,谢谢
2013-5-6 22:00
0
雪    币: 158
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
楼主说这是对初学者比如刚写过hello world的人写的文章,能够尽量让她们入门,我觉得刚开始的回收机制和生存周期那个我看的差不多懂了,估计还要再想想,但是后面的多线程我就看不怎么懂,尤其是那些单词,都不知道代表什么。我是安卓的初学者,以后有什么问题了,还请各位多多指教。虽然文章我看的很懵懂,但是对安卓的感觉有强烈的了一些,而且对app在手机上的生命有了进一步的了解,感谢楼主。~@^_^@~
2013-6-17 21:16
0
雪    币: 81
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
mark 学习一下
2013-6-17 23:05
0
游客
登录 | 注册 方可回帖
返回
//