永远不变的就是变。

俗话说的好,环境改变人生。

常常面对的是一群积极奋进的人,那么你的心态和生活也会变的充满斗志。青春在于折腾,趁我们还年轻,拿出你的激情。踏着泪水载着梦,才干拥有自己的一片天空。

上上上周,有机会增加了一个比較小的andorid 开发群,群内活力充足,每日有不常见面试题。深入android 源代码的问题。由群主发起。各路大神讨论,为菜鸟(比方我)普及android知识。每日进步一点点,慢慢积累自己的財富~

本文收集题目来自:wing_Android 技术交流群(425983695),欢迎青春朝气的你增加。

1.merge标签的作用

假设出现静态页面载入也卡顿,一定是ui布局的层次关系没优化好。每增加一层布局,就会延迟界面显示。

<merge/> 标签主要用于android UI界面结构的优化。能够降低多余的层级,<merge/>多用于替换FrageLayout或者当一个布局包括还有一个时候。  <merge/>标签可用于嵌套层的布局,比如你的主布局文件为垂直布局。引入一个垂直布局include ,这个include布局使用的最外层layout没意义还会增加主布局的层数,造成布局载入慢。
使用<merge/>标签,系统直接忽略merge节点,载入merge节点包括的其它控件。

2.view变化监听器ViewTreeObserver的使用

几个接口

interface  ViewTreeObserver.OnGlobalFocusChangeListener
  //当在一个视图树中的焦点状态发生改变时。所要调用的回调函数的接口类   
interface  ViewTreeObserver.OnGlobalLayoutListener
  //当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时。所要调用的回调函数的接口类  
interface  ViewTreeObserver.OnPreDrawListener
  //当一个视图树将要绘制时,所要调用的回调函数的接口类   
interface  ViewTreeObserver.OnScrollChangedListener
  //当一个视图树中的一些组件发生滚动时。所要调用的回调函数的接口类   
interface  ViewTreeObserver.OnTouchModeChangeListener
  //当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类

用法和点击事件相似

3.activity生命周期由谁调用,或者说由谁管理

activityManageService  (查看源代码能够看到)

4.什么叫进程

进程是系统进行资源分配和调度的一个独立单位,线程是CPU调度和分派的基本单位
进程和线程的关系:
(1)一个线程仅仅能属于一个进程,而一个进程能够有多个线程,但至少有一个线程。
(2)资源分配给进程。同一进程的全部线程共享该进程的全部资源。
(3)线程在运行过程中,须要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
(5)线程是指进程内的一个运行单元,也是进程内的可调度实体。

线程与进程的差别:
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。

(2)并发性:不仅进程之间能够并发运行,同一个进程的多个线程之间也能够并发运行。

(3)拥有资源:进程是拥有资源的一个独立单位。线程不拥有系统资源,但能够訪问隶属于进程的资源。

(4)系统开销:在创建或撤销进程的时候,由于系统都要为之分配和回收资源,导致系统的明显大于创建或撤销线程时的开销。但进程有独立的地址空间。进程崩溃后。在保护模式下不会对其它的进程产生影响,而线程仅仅是一个进程中的不同的运行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮。可是在进程切换时。耗费的资源较大,效率要差些。

5.抽象类和接口的差别

抽象类能够有非抽象方法

抽象类须要继承。且仅仅能继承一个。
接口须要实现全部 未实现的方法,能够实现多个接口。

6.群友葫芦娃面试乐视题目

1.说说广播有哪几种启动方式,差别是什么
一是动态方式使用Context.registerReceiver()方法来注冊;
二是静态方式,即在AndroidManifest.xml中通过<receiver> 。

2.service启动方式和差别

Service的生命周期方法onCreate, onStart, onDestroy

有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

1. 通过startService

 Service会经历 onCreate -> onStart

 stopService的时候直接onDestroy

假设是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。下次调用者再起来能够stopService。

2. 通过bindService

Service仅仅会运行onCreate, 这个时候服务的调用者和服务绑定在一起

调用者退出了,Srevice就会调用onUnbind->onDestroyed所谓绑定在一起就共存亡了。

而且这样的方式还能够使得
调用方(比如)调用服务上的其它的方法。

3.handler机制
4.了解过什么和屏幕适配和机型适配有关的
5.写个排序

7.UI线程和工作线程差别

Ui线程是安卓的主线程,不能做耗时操作或联网操作
主线程有内置looper,工作线程没有
主线程就是一个looper线程, 子线程不能改动ui是由于viewroot有一个checkThread函数来检查当前线程,假设是工作线程则抛出异常
 主线程的Looper,是在activityThread创建的

8.frgment意外销毁怎么恢复---------群友葫芦娃小米面试题

activity
会由于内存不足意外中止,那么activity里面的fragment怎么恢复呢?

在activity 的onSaveInstanceState() 方法中 通过FragmentManager 调用putFragment   。保存fragment的状态

关于解答译文:http://blog.csdn.net/a940659387/article/details/50730076

9. 2.26群友葫芦娃群内提问

1.使用viewholder的时候,自定义的class
viewHolder须要static吗,为什么?

最好是静态的,非静态内部类要有外部类的对象才干被引用,须要实例化。

静态内部类就不同了。不用外部类的额实例就能拿到。

为了保证对象唯一节约资源。

打个比方:就和Activity中的handler一样。最好定义为静态的。这样即使handler没有运行完。Activity还是能被正常回收。不会导致内存泄露。

接憧而至第二个问题
2.为什么handler会导致内存泄露?
同一个线程的handler用的looper都是同一个,一个线程仅仅有一个looper。消息中存在handler的引用。所以仅仅要有runnable或者message,handler就无法被回收了。

handler无法被回收,则引起当前使用handler的Activity无法被回收,因此即使运行了Activity的生命周期onDestroy,handler的引用还是存在的,时间长了,就出现了内存泄露。

总结:事实上就是一个引用链。分别为:messagequeue message handler activity

以上内容由博主纯手工记录和部分问题整理。

转载请注明出处:http://blog.csdn.net/qq_33078541?viewmode=contents

如你也是一个技术迷恋着,请增加我们的青春队伍~wing_Android 技术交流群(425983695)

android 深入浅出 群内“每日一问” 问答总结的更多相关文章

  1. 每日一问:Android 消息机制,我有必要再讲一次!

    坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 我 17 年的 面试系列,曾写过一篇名为:Android 面试(五):探 ...

  2. SDK接入(2)之Android Google Play内支付(in-app Billing)接入

    SDK接入(2)之Android Google Play内支付(in-app Billing)接入 继上篇SDK接入(1)之Android Facebook SDK接入整理完Facebook接入流程之 ...

  3. 群内大神与你交流WEB经验 业内专家指点就职技巧

    就知道你是一个有理想要抱负的人,不会满足于做一个初级的前端开发工程师.在接下来的这个阶段,我们将走上前端开发的进阶之路,将自己的能力再往上拔高一个等级.同样,薪资也会往上升一个等级!但是,如果你是一个 ...

  4. Android深入浅出之 AudioTrack分析

    Android深入浅出之Audio 第一部分 AudioTrack分析 一 目的 本文的目的是通过从Audio系统来分析Android的代码,包括Android自定义的那套机制和一些常见类的使用,比如 ...

  5. Android开发之使用URL訪问网络资源

    Android开发之使用URL訪问网络资源 URL (UniformResource Locator)对象代表统一资源定位器,它是指向互联网"资源"的指针. 资源能够是简单的文件或 ...

  6. Android深入浅出之Binder机制(转)

    Android深入浅出之Binder机制 一 说明 Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交互的.所以搞明白B ...

  7. Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)

    Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本) Hive 安装依赖 Hadoop 的集群,它是运行在 Hadoop 的基础上. 所以在安装 Hive 之 ...

  8. 每日一问:讲讲 Java 虚拟机的垃圾回收

    昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...

  9. 每日一问:你了解 Java 虚拟机结构么?

    对于从事 C/C++ 程序员开发的小伙伴来说,在内存管理领域非常头疼,因为他们总是需要对每一个 new 操作去写配对的 delete/free 代码.而对于我们 Android 乃至 Java 程序员 ...

随机推荐

  1. zookeeper启动

    Zookeeper启动总结1.实际项目用的是Linux,问题不大,本地开发学习用Windows,问题多多.2.Zookeeper3.5.1-alpha,和本地JDK1.7,有冲突,无法正常启动.3.Z ...

  2. Mysql使用导出导入数据库

    要在两台不同的电脑上进行开发,数据库需要统一,由于自己第一次完整的设计表结构,因此多次更改表结构,造成了很多不必要的麻烦, 需要将数据库导出成sql脚本: 命令行下具体用法如下: mysqldump ...

  3. 获取url上的参数

    var aa = '?name=hss&age=13';        function strToObj(str){            if(typeof str === 'undefi ...

  4. [HNOI/AHOI2018]转盘(线段树优化单调)

    gugu  bz lei了lei了,事独流体毒瘤题 一句话题意:任选一个点开始,每个时刻向前走一步或者站着不动 问实现每一个点都在$T_i$之后被访问到的最短时间 Step 1 该题可证: 最优方案必 ...

  5. idea搭建SSM的maven项目(tomcat容器)

    一.创建maven的web项目 (1)选择项目的骨架 (2)写项目的坐标 (3)maven的设置 设置maven的本地仓库,以及配置文件的位置,同时点击+号,填入archetypeCatalog和in ...

  6. Mybatis的一级二级缓存

    Mybatis提供了缓存机制,可以减轻数据库的压力,提高性能 Mybatis的缓存分为两级:一个是一级缓存,一个二级缓存 一级缓存:即默认使用的缓存SqlSession级别的缓存,只在sqlsessi ...

  7. PHP:获取用户IP

    文章来源:http://www.cnblogs.com/hello-tl/p/7685263.html //获取用户ip(外网ip 服务器上可以获取用户外网Ip 本机ip地址只能获取127.0.0.1 ...

  8. pip各种

    pip: 一个现代的,通用的 Python 包管理工具.提供了对Python 包的查找.下载.安装.卸载的功能. windows:自带pip,直接使用. Linux:执行下面命令即可完成安装. # w ...

  9. 1. 垃圾收集简介 - GC参考手册

    说明: 在本文中, Garbage Collection 翻译为 “垃圾收集”, garbage collector 翻译为 “垃圾收集器”; 一般认为, 垃圾回收 和 垃圾收集 是同义词. Mino ...

  10. selenium切换frame(iframe)

    例如网页代码为: <!DOCTYPE html><html lang="en"><head> <meta charset="UT ...