Android刷题:
1.请简述activity启动流程。
2.了解过AMS、PMS源码吗?
3.请简述View的绘制流程。
4.MeasureSpec测量模式分别代表什么意思?
UNSPECIFIED:不对View大小做限制,如:ListView,ScrollView
EXACTLY:确切的大小,如:100dp或者march_parent
AT_MOST:大小不可超过某数值,如:wrap_content
5.请简述View的事件分发机制。
6.请简述HashMap原理。
7.请简述ArrayList原理。
8.请简述LinkList原理。
9.你在开发过程中常用设计模式有哪些?
1. 单例模式
2. Build建造者模式
3. 观察者模式
4. 原型模式
5. 策略模式
6. 工厂模式
10.单例设计模式的双重校验的目的?去掉第一个判空或第二个判空有啥不同?
public
static
Singleton
getInstance
(
)
{
if
(
instance
==
null
)
{
synchronized
(
Singleton
.
class
)
{
if
(
instance
==
null
)
{
instance
=
new
Singleton
(
)
;
}
}
}
return
instance
;
}
可以看到在getInstance()方法里面,先判断当前实例是否为空,然后进入同步处理后又判断一次实例是否为空。前后两次判断校验了两次。这个就是双重校验
去掉第一个判断为空:
即懒汉式(线程安全),这会导致所有线程在调用getInstance()方法的时候,不管三七二十一就直接排队等待同步锁,然后等到排到自己的时候进入同步处理时,才去校验实例是否为空,这样子做会耗费很多时间(即线程安全,但效率低下)。
去掉第二个判断为空:
即懒汉式(线程不安全),这会出现 线程A先执行了getInstance()方法,同时线程B在因为同步锁而在外面等待,等到A线程已经创建出来一个实例出来并且执行完同步处理后,B线程将获得锁并进入同步代码,如果这时B线程不去判断是否已经有一个实例了,然后直接再new一个。这时就会有两个实例对象,即破坏了设计的初衷。(即线程不安全,效率高)
双重校验的目的:
除了第一次实例化需要进行加锁同步,之后的线程只要进行第一层的if判断不为空即可直接返回,而不用每一次获取单例都加锁同步,因此相比前面两种懒汉式,双重检验锁更佳。(双重校验锁结合了 两种懒汉式 的优点)
11.请简述OkHttp原理。
12.请简述Glide原理。
13.请简述RxJava原理。
14.请简述EventBus原理。
15.请简述JVM原型。
16.java内存模型,垃圾回收机制,垃圾回收哪个区域,对象在内存哪个区域。
17.startService和bindService区别,多次启动会调用哪些方法?
startService:
作用:启动服务
生命周期:onCreate() → onStartCommand() → onDestory()
bindService:
作用:启动服务
生命周期:onCreate() → onBind() → onUnbind() → onDestory()
-
从通讯角度看,使用startService()方法启动的服务不能与Activity进行通讯,而使用bindService()方法启动的服务可以与Activity进行通讯。
-
从生命周期看,startService()方法启动服务是通过startCommand()方法,而bindService()方法是通过onBind()方法。
-
通过startService()方法启动的服务,当调用者退出后,服务仍然可以运行,而使用bindService()方法启动的服务则不行。
18.Activity旋转会调用哪些方法(横竖屏切换)。
Activity横竖屏切换的生命周期根据清单配置文件中的属性“ android:configChanges ”的值的不同而不同。
android:configChanges =" orientation "消除横竖屏的影响
android:configChanges=" keyboardHidden " :消除键盘的影响
android:configChanges=" screenSize " :消除屏幕大小的影响
情况1:
当
android:configChanges =" orientation "
或者
android:configChanges =" orientation | keyboardHidden "
或者不设置该属性时,其切换屏幕的生命周期如下:
onPause() → onSaveInstanceState() → onStop() → onDestory() → onCreate() → onStart() → onRestoreInstanceState() → onResume()
情况2:
当
android:configChanges=" orientation | screenSize | keyboardHidden "
时,其切换屏幕不会调用任何一个生命周期方法。
情况3:
当
android:configChanges=" orientation | screenSize "
时,其切换屏幕时不会调用任何一个生命周期方法,而是调用onConfigurationChanged()方法。
19.你都做过哪些内存优化?
1.图片压缩 2.ListView复用
20.MVP,MVC,MVVM的区别?
21.如何对你的应用进行适配?
1.UI切图分成几套图;2.尽量使用weight/weightSum属性;3.values-swxxdp;4.layout-swxxdp;
22.dp、dpi、px的区别?
px:像素,如分辨率1920x1080表示高为1920个像素、宽为1080个像素
dpi:每英寸的像素点,如分辨率为1920x1080的手机尺寸为5英寸,则该手机DPI为(1920x1920+ 1080x1080)½/5
dp:密度无关像素,是个相对值
23.res目录和assets目录的区别?
1. res会在R.java生成索引ID,在打包的时候判断资源有没有用到,没用到的时候不会被打包进apk中(res/raw文件夹除外),而assets不会。
2. res用getResource()访问,assets用AssetsManager访问。
3. res/raw与assets里的文件在打包的时候都不会被系统二进制编译,都被原封不动打包进APK,通常用来存放游戏资源、脚本、字体文件等。但res/raw不可以创建子文件夹,而assets可以。
4. res/xml会被编译成二进制文件。res/anim存放动画资源。
24.invalidate()和postInvalidate()的区别?
invalidate()只能在UI线程中调用;
postInvalidate()可以在子线程中调用
25.SurfaceView和View的区别?
26.Android中提供哪些数据持久存储的方法?
1.SharedPreferences
存储路径:(data/data/packagename/shares_prefs), 轻量级存储,以键值对的形式存储在xml中,一般用来保存应用中的设置属性
2.文件存储 ;opSD卡存储多媒体文件, 文件缓存
3. Sqlite数据库 存储路径:(data/data/packagename/databases), 一种嵌入式数据库,支持sql语言,存储大量结构性数据
4.ContentProvider 进程(应用程序)间数据共享,数据源可以是sqlite,也可以是xml,相关类:
ContentResolver(内容解析器), ContentObserver(数据 观察者)
5. 网络存储 天气数据的xml,json格式等等,通过HttpUrlConnection,HttpClient,或者SOAP协议获取数据
27.View动画和属性动画的区别?
属性动画比视图动画更强大,不但可以实现缩放、平移等操作,还可以自己定义动画效果,监听动画的过程,在动画过程中或完成后做响应的动作。
属性动画不但可以作用于View,还能作用于Object。
属性动画利用属性的改变实现动画,而视图动画仅仅改变了view的大小位置,但view真正的属性没有改变。
28.View动画为何不能真正改变View的位置?而属性动画为何可以?
29.属性动画插值器和估值器的作用?
30.Message可以如何创建?哪种效果更好,为什么?
创建Message对象的时候,有三种方式,分别为:
1.Message msg = new Message();
2.Message msg2 = Message.obtain();
3.Message msg1 = handler1.obtainMessage();
第二种或第三种,避免重复创建Message对象。
31.主线程中Looper的轮询死循环为何没有阻塞主线程?
32.线程池的好处、原理、类型?
线程池可以对线程进行复用;
线程池可以对线程进行管理;
(1)FixedThreadPool:
Fixed中文解释为固定。结合在一起解释固定的线程池,说的更全面点就是,有固定数量线程的线程池。其corePoolSize=maximumPoolSize,且keepAliveTime为0,适合线程稳定的场所。
(2)SingleThreadPool:
Single中文解释为单一。结合在一起解释单一的线程池,说的更全面点就是,有固定数量线程的线程池,且数量为一,从数学的角度来看SingleThreadPool应该属于FixedThreadPool的子集。其corePoolSize=maximumPoolSize=1,且keepAliveTime为0,适合线程同步操作的场所。
(3)CachedThreadPool:
Cached中文解释为储存。结合在一起解释储存的线程池,说的更通俗易懂,既然要储存,其容量肯定是很大,所以他的corePoolSize=0,maximumPoolSize=Integer.MAX_VALUE(2^32-1一个很大的数字)
(4)ScheduledThreadPool:
Scheduled中文解释为计划。结合在一起解释计划的线程池,顾名思义既然涉及到计划,必然会涉及到时间。所以ScheduledThreadPool是一个具有定时定期执行任务功能的线程池。
33.加载图片的时候需要注意什么?
加载大图片的时候,需要压缩图片,避免OOM。
34.Intent的几种有关 Activity 启动的方式有哪些,你了解每个含义吗?
我认为有5种。4种显示跳转,1种隐式跳转。
显示:
1.Intent intent = new Intent(AActivity.this,BActivity.class);
startActivity(intent);
2.Intent intent = new Intent();
intent.setClass(AActivity.this,BActivity.class.class);
startActivity(intent);
3.Intent intent = new Intent();
intent.setComponent(new ComponentName(AActivity.this,"com.wzj.jumpdemo.BActivity"));
startActivity(intent);
其中com.wzj.jumpdemo.BActivity是Activity的具体名称.
4.Intent intent = new Intent();
intent.setClassName(AActivity.this,"com.wzj.jumpdemo.BActivity");
startActivity(intent);
隐式:
Intent intent = new Intent();
intent.setAction("com.wzj.administor");
startActivity(intent);
其中“com.wzj.administor”是在xml文件中自己定义的。
例如:在BActivity中声明
35.通过 Intent 传递一些二进制数据的方法有哪些?
36.项目中如何做性能优化的?
37.了解哪些性能优化的工具?
traceview
38.布局上如何优化?
标签
39.内存泄漏是什么?为什么会发生?常见哪些内存泄漏的例子?都是怎么解决的?
40.内存泄漏和内存溢出的区别?
内存泄漏到一定程度会导致内存溢出
41.使用那些版本控制工具?Git和SVN的区别?
GIT
42.了解Git工具吗?用过哪些命令?解决冲突时git merge和git rebase的区别?
提交代码:
git add .
git commit
git push
远程代码覆盖本地代码:
git fetch --all
git reset --hard origin/master
git pull
43.
单例模式的几种实现具体的区别?
44.TCP和UDP的区别?
45.谈谈TCP为什么要三次握手?为什么要四次挥手?
46.播放视频用TCP还是UDP?为什么?
47.了解哪些响应状态码?
48.get和post的区别?
略
49.HTTP1.0、HTTP1.1、HTTP2.0的区别?
50.HTTP和TCP的区别?
51.HTTP和HTTPS的区别?
52.HTTP和Socket的区别?
53.Java中引用有几种类型?在Android中常用于什么情景?
54.JVM、Dalvik、ART的区别?
55.Java中堆和栈的区别?
56.操作系统中进程和线程的区别?
57.进程死锁的产生和避免?
58.APK 瘦身是怎么做的?
59.Binder 机制,讲讲 Linux 上的 IPC 通信,Binder 有什么优势,Android 上有哪些多进程通信机制?
60.LRUCache 原理。
61.String 转 int。
62.
如何实现链表翻转。
63.android与服务器交互的方式中的对称加密和非对称加密是什么?
64.热修复的原理。
65.app启动的方式有三种
66.使用UML画一下访问者设计模式。
67.二叉树,读取每一层最右边的节点。
68.UML画出工厂模式。
69.实现一个CAS(乐观锁)的方法。
70.ASM以及MD5的实现原理,png的压缩原理。
71.音视频编解码的流程。
72.Dex的组成,为什么每个dex会有65536的限制。
73.对JNI和C++了解吗?
74.mp4播放alpha视频的实现方案,详细解说。
75.cookie、session、token的含义和区别。
76.音视频的相关知识,NV20,YUV,RGB的关系,为什么mp4的压缩率比webp的动画要高,编解码的流程,通用的编码格式,软硬解的区别。
77.一张图片加载到手机内存中真正的大小是怎么计算的。
78.git误删分支,怎么恢复。
79.说说activity、window、fragment之间的关系,分别干什么。
80.rxjava使用(背压)。
81.OKHttp如何支持HTTP2的。
82.String 与StringBuilder StringBuffer的区别?
83.
静态代码块 构造代码块 构造方法的执行顺序及注意问题?
84.Activity的几种启动模式,各自举例说明?
85.RecyclerView 几种LayoutManager?
86.java中 int 占用几个字节?
8个字节
87.Activity 冷启动、热启动的时间?
88.Rxjava线程切换的原理?
89.怎么优化数据库?
90.
RecylerView的Item单个刷新是如何实现的?
91.
系统是怎么帮我们启动找到桌面应用的?
92.
mmap + native 日志优化?
93.
讲讲页面的刷新机制,GPU 调试工具几个颜色值分别代码什么?
94.
说说 ConcurrentHashMap 的实现原理说下.
95.
so 的加载流程是怎样的,生命周期是怎样的
96.
native 层怎么检测内存泄漏
97.
leakcanary 的原理,哪些对象可以用来做 gc-root
98.
你遇到的最难解决的问题?
99.
线上有人反馈问题你一般怎么处理的?
腾讯bugly搜集用户crash
100.
讲一讲动态注册和静态注册
101.
数组和链表的区别说下
102.
java中==和equals和hashCode的区别
103.int、char、long各占多少字节数
int 4字节
char 1字节
long 8字节
104.int与integer的区别
105.谈谈对java多态的理解
多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调
用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。如果将对象的方法视为对象向外
界提供的服务,那么运行时的多态性可以解释为:当 A系统访问B系统提供的服务时,B系统有多种提供服务的方式,
但一切对 A 系统来说都是透明的。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写
(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要
做两件事:1. 方法重写(子类继承父类并重写父类中已有的或抽象的方法);2. 对象造型(用父类型引用引用子类型
对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。
106.String、StringBuffer、StringBuilder区别
107.什么是内部类?内部类的作用
108.抽象类和接口区别
109.抽象类的意义
110.抽象类与接口的应用场景
111.抽象类是否可以没有方法和属性?
112.接口的意义
代码逻辑更加清晰
113.泛型中extends和super的区别
114.父类的静态方法能否被子类重写
115.进程和线程的区别
116.final,finally,finalize的区别
117.序列化的方式
Serializable
Parcelable
118.Serializable 和Parcelable 的区别
119.静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
120.静态内部类的设计意图
121.成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用
122.谈谈对kotlin的理解
123.闭包和局部内部类的区别
124.string 转换成 integer的方式及原理
125.哪些情况下的对象会被垃圾回收机制处理掉?
126.讲一下常见编码方式?
127.utf-8编码中的中文占几个字节;int型几个字节?
128.静态代理和动态代理的区别,什么场景使用?
129.Java的异常体系
130.谈谈你对解析与分派的认识。
131.修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法?
132.Java中实现多态的机制是什么?
133.如何将一个Java对象序列化到文件里?
134.说说你对Java反射的理解
135.说说你对Java注解的理解
136.说说你对依赖注入的理解
137.说一下泛型原理,并举例说明
138.Java中String的了解
139.String为什么要设计成不可变的?
140.Object类的equal和hashCode方法重写,为什么?
141.开启线程的三种方式?
142.线程和进程的区别?
143.为什么要有线程,而不是仅仅用进程?
144.run()和start()方法区别
145.如何控制某个方法允许并发访问线程的个数?
146.在Java中wait和seelp方法的不同;
147.谈谈wait/notify关键字的理解
148.什么导致线程阻塞?
149.线程如何关闭?
150.讲一下java中的同步的方法
151.数据一致性如何保证?
152.如何保证线程安全?
153.如何实现线程同步?
154.两个进程同时要求写或者读,能不能实现?如何防止进程的同步?
155.线程间操作List
156.Java中对象的生命周期
157.Synchronized用法
158.synchronize的原理
159.谈谈对Synchronized关键字,类锁,方法锁,重入锁的理解
160.static synchronized 方法的多线程访问和作用
161.同一个类里面两个synchronized方法,两个线程同时访问的问题
162.volatile的原理
163.谈谈volatile关键字的用法
164.谈谈volatile关键字的作用
165.谈谈NIO的理解
166.synchronized 和volatile 关键字的区别
167.synchronized与Lock的区别
168.ReentrantLock 、synchronized和volatile比较
169.ReentrantLock的内部实现
170.lock原理
171.死锁的四个必要条件?
172.怎么避免死锁?
173.对象锁和类锁是否会互相影响?
174.什么是线程池,如何使用?
175.Java的并发、多线程、线程模型
176.谈谈对多线程的理解
177.多线程有什么要注意的问题?
178.谈谈你对并发编程的理解并举例说明
179.谈谈你对多线程同步机制的理解?
180.如何保证多线程读写文件的安全?
181.多线程断点续传原理
182.断点续传的实现
183.
四大组件是什么
activity service content provider broadcast reciever
184.四大组件的生命周期和简单用法
185.Activity之间的通信方式
186.Activity各种情况下的生命周期
188.Activity与Fragment之间生命周期比较
189.Activity上有Dialog的时候按Home键时的生命周期
190.两个Activity 之间跳转时必然会执行的是哪几个方法?
192.Activity的四种启动模式对比
193.Activity状态保存于恢复
194.fragment各种情况下的生命周期
195.Fragment状态保存startActivityForResult是哪个类的方法,在什么情况下使用?
196.如何实现Fragment的滑动?
197.fragment之间传递数据的方式?
198.Activity 怎么和Service 绑定?
199.怎么在Activity 中启动自己对应的Service?
200.service和activity怎么进行数据交互?
201.Service的开启方式
202.请描述一下Service 的生命周期
203.谈谈你对ContentProvider的理解
204.说说ContentProvider、ContentResolver、ContentObserver 之间的关系
205.请描述一下广播BroadcastReceiver的理解
206.广播的分类
207.广播使用的方式和场景
208.在manifest 和代码中如何注册和使用BroadcastReceiver?
209.本地广播和全局广播有什么差别?
210.BroadcastReceiver,LocalBroadcastReceiver 区别
211.AlertDialog,popupWindow,Activity区别
212.Application 和 Activity 的 Context 对象的区别
213.Android属性动画特性
214.如何导入外部数据库?
215.LinearLayout、RelativeLayout、FrameLayout的特性及对比,并介绍使用场景。
略
216.谈谈对接口与回调的理解
略
217.回调的原理
略
218.写一个回调demo
略
219.介绍下SurfView
220.RecycleView的使用
221.序列化的作用,以及Android两种序列化的区别
222.Android动画框架实现原理
223.Android各个版本API的区别
224.Requestlayout,onlayout,onDraw,DrawChild区别与联系
226.Activity-Window-View三者的差别
229.低版本SDK如何实现高版本api?
230.描述一次网络请求的流程
231.HttpUrlConnection 和 okhttp关系
232.Bitmap对象的理解
233.looper架构
234.ActivityThread,AMS,WMS的工作原理
235.自定义View如何考虑机型适配
236.自定义View的事件
237.AstncTask+HttpClient 与 AsyncHttpClient有什么区别?
238.LaunchMode应用场景
239.AsyncTask 如何使用?
240.SpareArray原理
242.AndroidService与Activity之间通信的几种方式
243.IntentService原理及作用是什么?
244.说说Activity、Intent、Service 是什么关系
245.ApplicationContext和ActivityContext的区别
246.SP是进程同步的吗?有什么方法做到同步?
247.谈谈多线程在Android中的使用
248.进程和 Application 的生命周期
249.封装View的时候怎么知道view的大小
250.RecycleView原理
251.AndroidManifest的作用与理解
252.Handler机制和底层实现
253.Handler、Thread和HandlerThread的差别
254.handler发消息给子线程,looper怎么启动?
255.关于Handler,在任何地方new Handler 都是什么线程下?
256.ThreadLocal原理,实现及如何保证Local属性?
257.请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系
258.请描述一下View事件传递分发机制
259.Touch事件传递流程
260.事件分发中的onTouch 和onTouchEvent 有什么区别,又该如何使用?
261.View和ViewGroup分别有哪些事件分发相关的回调方法
262.View刷新机制
263.View绘制流程
264.自定义控件原理
265.自定义View如何提供获取View属性的接口?
266.Android代码中实现WAP方式联网
267.AsyncTask机制
268.AsyncTask原理及不足
269.如何取消AsyncTask?
270.为什么不能在子线程更新UI?
271.ANR产生的原因是什么?
272.ANR定位和修正
273.oom是什么?
274.什么情况导致oom?
275.有什么解决方法可以避免OOM?
276.Oom 是否可以try catch?为什么?
277.内存泄漏是什么?
278.什么情况导致内存泄漏?
279.如何防止线程的内存泄漏?
280.内存泄露场的解决方法
281.内存泄漏和内存溢出区别?
282.LruCache默认缓存大小
283.ContentProvider的权限管理(解答:读写分离,权限控制-精确到表级,URL控制)
284.如何通过广播拦截和abort一条短信?
285.广播是否可以请求网络?
286.广播引起anr的时间限制是多少?
287.计算一个view的嵌套层级
288.Activity栈
289.Android线程有没有上限?
290.线程池有没有上限?
291.ListView重用的是什么?
292.Android为什么引入Parcelable?
293.Binder机制及底层实现
294.对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)?
295.实现一个Json解析器(可以通过正则提高速度)
296.统计启动时长,标准
297.如何对Android 应用进行性能分析以及优化?
298.ddms 和 traceView
299.性能优化如何分析systrace?
300.用IDE如何分析内存泄漏?
301.Java多线程引发的性能问题,怎么解决?
302.启动页白屏及黑屏解决?
303.启动太慢怎么解决?
304.怎么保证应用启动不卡顿?
305.App启动崩溃异常捕捉
306.自定义View注意事项
307.现在下载速度很慢,试从网络协议的角度分析原因,并优化(提示:网络的5层都可以涉及)。
308.Https请求慢的解决办法(提示:DNS,携带数据,直接访问IP)
309.如何保持应用的稳定性
310.RecyclerView和ListView的性能对比
311.ListView的优化
312.RecycleView优化
313.View渲染
314.Bitmap如何处理大图,如一张30M的大图,如何预防OOM
图片压缩,JPEG算法
315.java中的四种引用的区别以及使用场景
强引用 软引用 弱引用 虚引用
316.强引用置为null,会不会被回收?
317.什么是NDK库?
318.jni用过吗?
319.如何在jni中注册native函数,有几种注册方式?
320.Java如何调用c、c++语言?
321.jni如何调用java层代码?
322.进程间通信的方式?
323.Binder机制
324.简述IPC?
325.什么是AIDL?
326.AIDL解决了什么问题?
327.AIDL如何使用?
328.Android 上的 Inter-Process-Communication 跨进程通信时如何工作的?
329.多进程场景遇见过么?
330.Android进程分类?
331.进程和 Application 的生命周期?
332.进程调度
333.谈谈对进程共享和线程安全的认识
334.谈谈对多进程开发的理解以及多进程应用场景
335.什么是协程?
336.java虚拟机的特性
337.谈谈对jvm的理解
338.JVM内存区域,开线程影响哪块内存
339.对Dalvik、ART虚拟机有什么了解?
340.Art和Dalvik对比
341.虚拟机原理,如何自己设计一个虚拟机(内存管理,类加载,双亲委派)
342.谈谈你对双亲委派模型理解
343.JVM内存模型,内存区域
344.类加载机制
https://www.jianshu.com/p/7193600024e7
345.谈谈对ClassLoader(类加载器)的理解
https://www.jianshu.com/p/7193600024e7
346.谈谈对动态加载(OSGI)的理解
347.内存对象的循环引用及避免
348.内存回收机制、GC回收策略、GC原理时机以及GC对象
349.垃圾回收机制与调用System.gc()区别
350.Ubuntu编译安卓系统
351.系统启动流程是什么?(提示:Zygote进程 –> SystemServer进程 –> 各种系统服务 –> 应用进程)
352.大体说清一个应用程序安装到手机上时发生了什么
353.简述Activity启动全部过程
354.App启动流程,从点击桌面开始
355.逻辑地址与物理地址,为什么使用逻辑地址?
356.Android为每个应用程序分配的内存大小是多少?
google原生OS的默认值是16M
357.Android中进程内存的分配,能不能自己分配定额内存?
358.进程保活的方式
359.如何保证一个后台服务不被杀死?(相同问题:如何保证service在后台不被kill?)比较省电的方式是什么?
360.App中唤醒其他进程的实现方式
361.
描述一次网络请求的流程
362.知道activity的生命周期吗?