首先,文章 其实没什么技术含量, 单就一个有几年 C#的开发经验的,并且没接触过安卓开发的 程序员,去从头开是学习安卓的经历。作为本文的主旨。 希望可以帮助那些,像我一样感觉 看了安卓的代码 就可以编出全世界的人的一些捷径吧,其实把一颗浮躁的心 拉回现实当中,也许不学任何安卓教程就可以去改别人的代码,其实只是把你的开发经验拿来当你的挡箭牌确实过于表面了。
好了废话不多说,本人网络资料学习派,买过的书从来都是新的。相信很多人都给我一样,幸好安卓这么广泛,网上有不少资料。但是能系统的学习的我先在找到最好的就是安卓中文官网的开发训练。(http://www.android-doc.com/training/index.html) 以后有好的也会给大家分享。就安卓官网的教程而言,写的真是太好了。可以把我这个敷于表面的人,能静静的去看他的教程也是一种本事,其次吐槽一下,说好的中文教程,妈的就是标题是中文的,打开全是英文的。我这个英语3级都没过的人看起来好费劲。
下面讲讲最初想知道,和学到的。用了 两天的时间查着单词看完了最前面的两章,排除开始那章。在这里感谢一下沪江小D没有她,下辈子也读不完。好了作为一个有些经验的程序员。大多数人先做一个程序 学一个新的东西的时候。对于安卓 我急迫的想知道以下几点:
1. 想知道怎么打开一个安卓app
2. 画面上的控件怎么跟后台关联事件
3. 画面和画面之间怎么传递值
大概期初就这么多,觉得知道这些就可以写全世界了。。。。
结果安卓的官方教程 第一章,那个半演示半讲解的例子把上面的全都说明了。真是好样的。
果然知道人们想要什么。
还是其实没有什么技术含量。大体一看就懂了。 这里根据上面的问题,描述一下知道的答案。
1. 先知道怎么打开一个安卓app
其实想说一个 app 的 启动, 启动了什么,从哪里启动的。
第一章简单的讲了,你看到的 每个app的画面 是被叫做 一个 activity 的东西。
简单的理解就像是 C#中的 一个form 。
其实是一样的东西,名字不一样而已。
再来看 activity 有什么 ,用谷歌IDE,会生成一个 简单 activity 。
直接运行就是一个 Hello world 。
那么是怎么决定运行那个 activity 的呢?
安卓的启动,还有各个activity 都定义在一个XML里面。
叫做 AndroidManifest.xml
具体里面怎么写不解释,现在我也不会,不过按照生成的简单的例子来看,照猫画虎应该没问题。
所以之后那个xml 的内容应该去好好的学一学。
之后看看 activity 里面的东西,
里面要你去写一个 OnCreate的方法,以我们的经验来看跟 C#的pageload一个逼样。
所以你的初始化的一些东西 应该会被写到这里。
最开始就一个OnCreate 好了,觉得 app的开始应该没问题了。
2. 画面上的控件怎么跟后台关联事件
例子中在画面上加了一个按钮控件,当然,按钮控件可以通过安卓的IDE直接拖上去。
也可以在它的画面定义XML里面写, 就像是HTML差不多的感觉。
我是直接拖的。
查看按钮的属性会有一个 OnClick的接口,学过C#的都知道。把事件付给他就行了。
但是安卓的IDE还没做到,自动添加事件。所以,OnClick的事件函数应该是什么样的呢?
例子中明确的说明了, 应该是所有的画面的控件都是一个样的。(不保证以后发现错误会改正。)
public voidsendMessage(View view){}
函数是这样的实现,必须是public 的,必须是没有返回值的,参数必须是 View的就行。
那函数里面就可以做你想做的了。然后画面各个控件怎么取值负值可以单独去查了。
3. 画面和画面之间怎么传递值
再说画面之间的传值,当然可能更想知道,app和app之间的传值 哈哈。
画面传值用了一个类似中间件的东西,叫做intent 。通过它,你可以给启动,另一个画面(activity)把值传给他,也可以,定义通用的匹配内容,调用其他程序。
比如说分享,从你的程序分享一些东西到微信里。 那么应该用的就是 intent (没证实)
好了暂时知道这个东西怎么个意思了。官方的小代码看一下。
前一个画面中刚才那个按钮的事件:
/** Called when the user selects the Send button */
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
实例化了一个 intent,实例化时就定义了你想要打开的画面的那个 activity的类, 然后把值直接塞到 intent里,类似键值那样。 就是这么暴力。
最后是打开另一个画面 intent 直接穿过去了。
下面是另一个画面接受的例子:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the message from the intent
Intent intent = getIntent();
String message = intent.getStringExtra(MyFirstActivity.EXTRA_MESSAGE);
}
其实到此为止,最先想要知道的东西,他都给你了,但是想想又能做什么呢?眼高手低的心态还是牵绊着我。
第二章开始
感觉其实还是做不了什么的我,硬着头皮开了下面的一个章节。
期初看题目 就绝的这个章节真没用啊。但是 仔细读完受益匪浅。主要讲了activity的生命周期。
我的大白话理解就是,activity 被开始创建的时候 调用了什么,之后,被停止的时候调用了什么。
那么也是废话不多,尽量的简介的总结一下,以备忘却。
首先activity 几个的状态。
Created 状态:程序期初调用你时的状态,转瞬间完成,也就是 执行完 OnCreate事件之后。就是这个状态, 但是这个状态马上就要去变成开始状态。
Started 状态:在执行OnStart 事件之后, 这个状态是画面要在前台显示时的状态。
这个状态也是转瞬即逝。 之后会保持在 画面显示的状态 Resumed 我不知道怎么翻译好。
叫返回状态?
Resumed 状态:这个状态是一个持续的状态, 你的程序保持在最前端的时候就会是这个状态。当然在进如这个状态之前 会必须调用 OnResume 事件。
Paused 状态: 暂停状态? 就是 你的画面 将要被 不显示在 最前的时候, 比如你进入选择程序那个页面,你点 程序选择按钮的瞬间就是这个状态。 也是不可持续的。它可以根据用户的操作,返回程序 或者让程序进入隐藏状态。当然进出这个状态之前 会调用
OnPause 事件。
Stopped 状态: 隐藏状态,你的程序处于系统的后台 ,没有被销毁,处于一种待机状态。
当然在进入这个状态之前会调用OnStop 事件。 值得注意的是,有时候根据用户的操作。
在你还没进入停止状态的时候, 你的app 就被清了。所以有可能 OnPasue 里 尽可能的完成你要的作业。 但是 OnPasue 是一个 中间状态 ,他可能会 转移到另一个程序,如果在这里面进行耗时的操作可能会引起画面跳转的缓慢。 所以要注意程序设计时的逻辑。来确保程序不影响到系统的速度。
上面的配图是 各个状态之间的切换的时候,事件调用的顺序。这点是在程序设计的时候值得好好去探讨和考虑的。
所以按我的理解OnCreate,OnResume ,OnPause 应该是比较重要的。 其他的应该用的比较少。
之后 图里没讲到的,但是又很重要的几点,在这一章节最后提到了。一般用不上,但是某些场景可能会事你解决问题的关键。
有一种状态场景叫做 被销毁后又被启动。安卓的机制很强大。它可以帮助你记住很多东西。通常是不需要去做什么的。
场景1:比如,你的程序在后台 ,因为用户的内存限制,系统把你清除出去了。然后用户,又通过选择最近程序中打开你的程序。
这时有两个很美妙的事件 会 被执行。
安卓 会想要保存你被清除之前的状态。比如你画面上有text框,在被清除时,text框上的字会被记住。
但是,你在某些场景中,不单单想记住这些,还想加一些 其他的内容, 那么你在哪里去写呢?
当安卓去记录的状态时 会调用 onSaveInstanceState这个事件,但这个事件被调用的时候可能意味着你的程序要Over了。呵呵。 所以你要添加一些小动作,以便之后能提示用户之类的。
当然有记住这个状态的功能,就有把这个状态返回给你,在上面的场景1当中,你被重新唤起的时候, 其实你的 程序已经被销毁了, 但是用户需要你,你要回来。怎么知道你是被保存了的状态了呢?
onRestoreInstanceState事件被调用是,就说明你之前有保存过状态。在里面去获得你保存的信息。具体怎么用就不说了。可以具体去查,这里告诉你里面有个这么个东西,在你程序设计的时候也许可以帮你解决掉一些难题。
大体内容就这么多,还是介意去直接读一下官方的教程。好多东西没讲到。这里只讲了我认为比较重要的几点,作为复习笔记,以便自己以后可以查阅。
希望能帮助到有需要的人。