妥妥的去面试之Android基础(二)

笔者由于在找工作,所以近期最主要的任务就是准备面试,不打无准备之仗。只有你准备充分了,那么你想要的机会才有机会入你怀中。

笔者会将准备面试的学习过程记录下来,方便自己复盘的同时也希望能给一道找工作的小伙伴们一些帮助。笔者准备的内容大纲如下

Android面试大纲.png

妥妥的去面试之Android基础(一)

接下来开始本篇博客的正菜

1.AsyncTask的缺陷?使用时有什么需要注意的点?

(1)通过AsyncTask可以更加方便的执行后台任务以及在主线程中访问ui,但是并不合适执行特别耗时的后台任务。

这个主要是因为在Android 3.0之后它的内部是串行执行任务的。串行执行任务效率就会比较低,虽然可以通过调用AsyncTask的executeOnExecutor方法并行执行任务,但是在并发程度比较高的情况下,很容易带来并发错误,这也是Android 3.0之后将并行改成串行的主要原因。

(2)注意AsyncTask的内存泄露、生命周期问题

  • 内存泄漏

如果AsyncTask被声明为Activity的非静态的内部类,那么AsyncTask会保留一个对Activity的引用。如果Activity已经被销毁,AsyncTask的后台线程还在执行,它将续在内存里保留这个引用,导致Activity无法被内存回收,引起内存泄漏。

解决方法:

(1)将AsyncTask改为静态内部类,也可以在内部类AsyncTask里面持有Activity的弱引用。

(2)在Activity的onDestroy生命周期方法里调用AsyncTask的cancel销毁AsyncTask

  • 生命周期

在Activity中创建的AsyncTask会一直执行,直到doInBackground()方法执行完毕,所以我们在销毁Activity的时候也需要销毁AsyncTask。通过在Activity的onDestroy生命周期方法里调用AsyncTask的cancel销毁AsyncTask

建议配合Android开发艺术探索(P392) 同时食用

2.谈谈Android的消息机制?

Android的消息机制主要指Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作过程,这三者实际上是一个整体。Handler的主要作用是将一个任务切换到某个指定的线程中去执行。

那Handler是怎么工作的呢?

Handler主要包含消息的发送和接收。某线程借助Handler发送一条消息,就会插入到MessageQueue这个消息队列中,Looper不断的轮询这个消息队列,如果轮询到新的消息到来就会去取出并处理它,再交由Handler的dispatchMessage方法处理消息,dispatchMessage方法是在Handler所在的线程,所以于此同时,线程也就切换到了Handler所在的线程了。

MessageQueue的内部实现是一个队列吗?

不是,它用一个单链表来维护消息列表,因为MessageQueue需要不断的插入和删除数据,而单链表实现插入和删除的效率高。

建议配合该博客同时食用 聊聊Android的消息机制

3.Thread、AsyncTask、IntentService的使用场景与特点?

  • Thread是一个普通的线程,独立于Activity的。当Activity 被 finish 后,如果没有主动停止 Thread或者 run 方法没有执行完,就会一直执行下去。
  • AsyncTask是 封装了两个线程池和一个Handler,(SerialExecutor用于排队,THREAD_POOL_EXECUTOR为真正的执行任务,Handler用于将工作线程切换到主线程)。它适合网络请求或者简单数据处理。但不适合处理特别耗时的后台任务。
  • IntentService本质上是封装了HandlerThread和Handler的异步框架。当任务会执行完成后,它会自动停止,因为它是一个服务,所以它的优先级比线程高很多,不容易被杀死,所以适合执行一些高优先级的耗时的后台任务。

HandlerThread就是可以使用Handler的Thread,它是一个串行队列,有自己的内部Looper对象,背后只有一个线程。

4.Serializable和Parcelable的比较

它们都是用于对象序列化的接口,有的时候我们需要把对象持久化到存储设备或者通过网络进行传输给其他客户端,这个时候就需要完成对象的持久化。通过这两个接口我们可以序列化来完成对象的持久化。

  • Serializable(Java自带)

Serializable是序列化的意思,表示将一个对象转换成存储或可传输的状态。序列化后的对象可以在网络上进传输,也可以存储到本地。

  • Parcelable(android专用)

使用Parcelable也可以实现对象序列化果,不过不同于Serializable,Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这也就实现传递对象的功能。

总结

Serializable需要大量的I/O操作,虽然使用时操作方便但是开销很大。Parcelable使用起来稍微麻烦点,但它的效率高,它是Android推荐的序列化方式,首选Parcelable。

建议配合Android开发艺术探索(P47) 同时食用

5.Android中有哪几种解析xml的方式,官方推荐哪种?它们的原理和区别?

有DOM、SAX、PULL三种解析方式

  • DOM是基于文档驱动的方式。可用于直接访问 XML 文档的各个部分。
    它是一次性全部将内容加载在内存中,生成一个树状结构,它没有涉及回调和复杂的状态管理。缺点是加载大文档时效率低下。
  • SAX使用流式处理的方式。是以事件为驱动的XML API,使用回调函数来实现。优点是解析速度快,占用内存少缺点是不能倒退
  • PULL内置于 Android 系统中。也是官方解析布局文件所使用的方式。
    Pull 与 SAX 有点类似,都提供了类似的事件,如开始元素和结束元素。不同的是Pull解析器并没有强制要求提供触发的方法。因为他触发的事件不是一个方法,而是一个数字。它使用方便,效率高

建议配合该博客同时食用 Android中解析XML格式数据的方法

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

推荐阅读更多精彩内容