<第一行代码>chapter 1 and 2

初衷

书读完很久了,但是最近才意识到只输入不输出的学习是没有意义的.所以才决定开始自己写一些东西将自己的想法与收获写出来.

chapter 1

贴一张经典的图吧

android系统架构:

系统架构:

  1. android系统是基于linux内核的,从4.0开始基于linux3.x,目前的AOSP6.0 Marshmallow是基于linux3.18.10,但是不同厂家的发行版可能采用的内核版本是不同的,目前来讲我还没研究到那么深刻...
  2. 第二层就是系统运行库层了,左边绿色的部分是一些C/C++库提供的特性支持,绘图啊,浏览器啊,轻量数据库,右边黄色的部分则分别是核心库来让开发者使用java语言来开发应用,而关于虚拟机,目前有dalvik与art两种模式,区别贴个链接吧,不赘述了.
    https://zh.wikipedia.org/wiki/Android_Runtime
  3. 应用框架层看起来就很面熟了,开发时要用到的系统API大都来自于这里,android的核心应用大多都是基于这些API完成开发的.
  4. 应用层就不说了,大家平常使用的话就是它了.

Logcat

android的日志工具,书里是用eclipse来说明例子的,我是用android studio.

Logcat一般是这个样子的

Log level可以根据你打印日志调用的方法分别显示
Log.v() - verbose - 琐碎的日志信息
Log.d() - debug - 调试信息
Log.i() - info - 打印重要的数据
Log.w() - warn - 警告信息,风险提示的作用
Log.e() - error - 错误信息
各方法的参数就不再赘述,以Log.d()为例,官方API推荐以下使用方式定义TAG
private static final String TAG = "MyActivity"; Log.v(TAG, "index=" + i);

chapter 2

第二章介绍的是关于Activity的内容.

基本操作

  1. 创建类继承自Activity,重写onCreate方法
    @Override protected void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); }
  2. 在onCreate方法中调用setContentView(R.layout.layout_my)方法来加载布局文件
    setContentView(R.layout.my_layout);
  3. 在AndroidMainifest文件中注册
    在<application>标签对中,采用<activity>标签对的形式来注册


    注册示例
  4. 隐藏标题栏
    requestWindowFeature(Window.FEATUR_NO_TITLE);
  5. Toast的使用,轻巧的提醒方式简单示例
    Toast.makeText(MainActivity.this,"Message",Toast.LENGTH_SHORT).show();
    别忘记调用show()方法.
  6. 使用Menu

新建menu文件

在Activity中重写onCreateOptionMenu()方法
@Override public boolean onCreateOptionMenu(Menu menu) { getMenuInflater().inflate(R. menu.my_menu,menu); return true; }
getMenuInflater()获取MenuInflater对象,调用其inflate方法,第一个参数代表我们要使用的menu资源,第二个参数代表要将此menu资源添加到哪个menu对象中去,添加成功返回true
-- 如何定义菜单响应事件呢:
重写Activity的onOptionItemSelected()方法
@Override public boolean onOptionItemSelected(MenuItem item) { switch(item.getItemId) { } return true; }
7.销毁一个活动的简单方法
finish();
Activity类提供了一个finish()方法,可以很方便的销毁活动

Intent的基本使用方法

  1. 显式Intent
    Intent intent = new Intent(FirstActivity.this,SecondActivity.class); startActivity(intent);
    Intent有很多种构造方法,上面是其中一种.这是最简单的启动另一个活动的办法.
  2. 隐式Intent
    隐式Intent更倾向于让系统分析这个Intent来选择启动合适的活动,这个合适与否是根据我们定义action 和category等信息来判断的.
    在AndroidMainifest文件中注册的activity标签包含一个intent-flater标签,然后在此标签下可以包含action与category两个标签.
    <action action/>
    <category category/>
    <data data/>
    (只有当两标签的内容同时匹配Intent中指定的action与category时,该活动才能响应此Intent)
    在Activity中定义Intent如下:
    Intent intent = new Intent("action"); intent.addCategory(category); intent.addData(data);
  3. Intent用于数据传递
    Activity1: Intent intent = new Intent(Acitivity1.this,Activity2.class); Intent.putExtra(“key”,data); startActivity(intent); 用putExtra方法来给intent附带数据,第一个参数是键值,第二个是数据
    Activity2: Intent intent = getIntent(); 在Activity2里调用getIntent方法来获取到启动它的Intent,获取一个Intent对象,然后调用Intent对象的各种get方法通过键值来获取Intent携带的数据
  4. 返回数据给上一个活动.
    Activity1: startActivityForResult(intent,1); @Override protected void onActivityResult(int requestCode,int resultCode,Intent data) { //这里用switch语句判断requsetCode来对数据进行操作 }
    Activity2: setResult(RESULT_OK,intent); 这个intent装载返回的数据,RESULT_CANCELED 或者 RESULT_OK
    如果是按返回键回到上一个活动,可以重写onBackPressed方法,
    @Override public void onBackPressed() { setResult(RESULT_OK,intent); }

活动的生命周期

返回栈

Android是使用Task来管理活动的,一个任务就是一组存放在栈里的活动,这个栈叫Back Stack.

贴两张图

生命周期金字塔模型
生命周期示意图

关于生命周期里的方法,感觉可以单独写一篇...先不说了

活动被回收了怎么办

onSaveInstanceState()方法来救你:
还是以键值对的方式来保存.

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("hhh","hello");
}

在onCreate()方法里可以去使用这个savedInstanceState:

if (savedInstanceState != null) {
String data = savedInstanceState.getString("hhh");
}

活动的启动模式

默认的活动启动模式是standard,修改启动模式的方式是通过修改AndroidMainifest里<Activity>标签的android:launchMode="",比如:

android:launchMode = "singleTask"
standard

每次启动一个活动,都会新建一个活动实例并push到返回栈里

singleTop

每次启动一个活动之前,都会先检查返回栈的栈顶是否是这个活动的一个实例,如果有则不创建新活动实例,直接启动这个栈顶的活动.

singleTask

启动这个活动之前检查返回栈是否有这个活动的实例,如果没有,新建一个返回栈,并新建一个活动push进去,如果返回栈有这个活动的实例就使用它,这个拥有singleTask的返回栈是接受其他活动入栈的.

singleInstance

与singleTask差不多,不过不接受其他活动入栈.

在这里留下官方文档的地址吧,
http://developer.android.com/intl/zh-cn/guide/topics/manifest/activity-element.html

书里的最佳实践

这个部分是书里对每章的学习做的一个实践的练习,很有意义.本章有三个实践.

知晓当前是在哪一个活动

写一个BaseActivity在onCreate()方法里添加一个Log方法,打印当前活动名,方便找到哪个界面对应哪个活动,让所有Activity都继承自BaseActivity,获取活动名的方法如下.

getClass().getSimpleName();
随时随地退出程序

思路是建立一个集合的管理器,非常的容易理解

public class ActivityCollector {
  public static List<Activity> activities = new ArrayList<Activity>();

  public static void addActivity(Activity activity) {
    activities.add(activity);
  }

  public static void removeActivity(Activity activity) {
    activities.remove(activity);
  }

  public static void finishAll() {
    for (Activity activity : activities) {
      if ( !activity.isFinishing() ) {
        activity.finish();
      }
    }
  }

}

分别在BaseActivity里的onCreate和onDestroy方法里调用 add与remove方法,想结束所有任务就调用finishAll方法.

启动Activity的最佳写法

个人目前感觉还用不太多,可能是没做过团队合作的东西吧.
思路很清晰,就是在被启动的活动中实现一个方法,这个方法可以接受很多参数,但是应该要有Context参数来判断是谁启动它.示例:

public static void actionStart(Contex contex, String data) {
  Intent intent = new Intent(contex, ThisActivity.class);
  intent.putExtra("key",data);
  contex.startActivity(intent);
}

启动实例:

ThisActivity.actionStart(Activity.this,data);

总结

第一次写博客,第一次用markdown,不足之处还请指证.
希望自己可以坚持下去,把自己学到的东西写出来.
目前计划是先写完这本书的总结,最近课也比较多,先不考虑别的了.

发表啦.哈哈,不知道有没有人看.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容