摘要:
- 线程中sleep、wait、notify、yield和join的用法和区别
- Android执行GC在什么情况下会造成内存泄露
- manifest.xml文件的作用
- 描述一下常用的五种布局及其区别
问题一
线程的状态分为:
NEW——>RUNNABLE——>BLOCKING——>WAITING——>TIME_WAITING——>TERMINAL
sleep
,线程进入阻塞状态,这时候的线程仍然持有同步方法或同步代码块的对象锁。当阻塞的时间到了,线程从阻塞状态进入就绪状态,否则一直阻塞。
wait
,在同步代码块或同步方法里面调用,线程进入等待状态,这时候的线程释放了对象锁。等待的时间到了或者调用了notify
、notifyAll
方法,线程重新进入就绪状态,这时候的线程需要重新获得对象锁,才可以继续执行
notify
,通知等待状态的线程可以进入就绪状态了
yield
,暂停当前正在运行的线程并释放cup资源,让同等优先级的线程获取运行的机会,但也可能没有效果
join
,主线程同时启动子线程t1、t2,分别调用join()
方法,子线程执行完成后,join
立即返回;否则,t1一直阻塞,t2线程阻塞,主线程无法获得执行的机会
Thread t1=new Thread(new Task());
t1.start();
Thread t2=new Thread(newe Task());
t2.start();
while(true){
try{
t1.join();
t2.join();
}catch(InterruptException e){
e.printStackTrace();
}
}
Thread.join的真正含义
https://blog.csdn.net/programmer_at/article/details/78934278
问题二
内存泄露的原因:长生命周期的对象持有的短生命周期的引用,短生命周期对象终止后,没法被垃圾回收器回收。当频繁地创建同对象时,大量的对象占据堆内存,最终可能造成OOM,内存泄露是造成OOM的主要原因之一。
- 单例生命周期和应用程序的生命周期一样长,如果传入一个Activity Context会造成内存泄露
- 非静态内部类实例化后赋值给一个静态变量,因为非静态内部类会持有外部类的引用
- Handler声明成内部类的形式或匿名类的形式,会持有外部类的引用(比如:Activity Context),Message持有Handler的引用,同时Message存放到消息队列中,等待执行。在消息执行之前,退出了Activity,因Message间接持有Activity的引用,造成Activity不符合回收标准,形成内存泄露
- 注册观察者模式时(比如:BroadcastReceiver、Service),在退出时,不要忘记了解除注册
- Bitmap对象占据的堆内存很大,使用结束后,除了调用
recycle()
方法释放内存外,也需要将Bitmap对象置null,更符合垃圾回收器标准,否则可能造成OOM - 资源使用完,未及时关闭,比如:Cursor、File、Stream、Bitmap
- WebView造成内存泄露的原因:Android 5.1版本,调用了
registerComponentCallbacks()
注册了某个东西,未来得及反注册调用unregisterComponentCallbacks()
,造成内存泄漏。解决版本,将WebView从父容器中移除,然后执行WebView相关方法 - MVP框架,P层以弱引用的方式传入Activity Context对象,防止耗时操作时,造成P层持有Activity引用,造成内存泄漏
WebView内存泄漏解决方法
https://blog.csdn.net/xygy8860/article/details/53334476
webview内存泄漏终极解决方案
https://www.jianshu.com/p/aa5a99b565e7
问题三
- 声明应用程序需要的基本信息:权限、包名、target sdk版本、min sdk版本
- 声明应用程序系统软硬件环境
- 声明主程序application属性
- 配置应用程序组件信息:Activity、Service、BroadcastReceiver和ContentProvider
- 配置参数内容:meta-data
问题四
- ConstraintLayout,约束布局,减少嵌套层级,优化绘制过程,推荐使用
- LinearLayout,线性布局,简单地垂直方向和水平方向摆放控件
- RelativeLayout,相对布局,实现稍微复杂一点的布局,性能略逊于线性布局,但比较灵活
- FrameLayout,帧布局,后一个控件遮盖前一个控件,实现层叠效果
- AbsoluteLayout,绝对布局,使用得比较少
你可能感兴趣的文章
来源:TeachCourse,
每周一次,深入学习Android教程,关注(QQ158#9359$239或公众号TeachCourse)
转载请注明出处: https://www.teachcourse.cn/2738.html ,谢谢支持!
转载请注明出处: https://www.teachcourse.cn/2738.html ,谢谢支持!
分类:面试题汇
标签:Android面试题