其他分享
首页 > 其他分享> > 2020-OPPO-Android-开发技术面总结有解析(经典,高难度篇,android面试八股文

2020-OPPO-Android-开发技术面总结有解析(经典,高难度篇,android面试八股文

作者:互联网

(1) 互斥条件。任务所使用的资源中至少有一个是不能共享的。

(2) 任务必须持有一个资源,同时等待获取另一个被别的任务占有的资源。

(3) 资源不能被强占。

(4) 必须有循环等待。一个任务正在等待另一个任务所持有的资源,后者又在等待别的任务所持有的资源,这样一直下去,直到有一个任务在等待第一个任务所持有的资源,使得大家都被锁住。

要解决死锁问题,必须打破上面四个条件的其中之一。在程序中,最容易打破的往往是第四个条件。

5. 数据库如何进行升级?SQLite增删改查的基础sql语句?

/**

*/
public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {
this(con

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

text, name, factory, version, null);
}

public SQLiteDatabase getWritableDatabase() {
synchronized (this) {
return getDatabaseLocked(true);
}
}

private SQLiteDatabase getDatabaseLocked(boolean writable) {

db.beginTransaction();
try {
if (version == 0) {
onCreate(db);
} else {
if (version > mNewVersion) {
onDowngrade(db, version, mNewVersion);
} else {
onUpgrade(db, version, mNewVersion);
}
}
db.setVersion(mNewVersion);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}

在 SQLiteOpenHelper 的构造函数中,包含了一个 version 的参数。这个参数即是数据库的版本。 所以,我们可以通过修改 version 来实现数据库的升级。 当version 大于原数据库版本时,onUpgrade()会被触发,可以在该方法中编写数据库升级逻辑。具体的数据库升级逻辑示例可参考这里。

常用的SQL增删改查:

ps:操作数据表是:ALTER TABLE。该语句用于在已有的表中添加、修改或删除列。ALTER TABLE table_name ADD column_name datatypeALTER TABLE table_name DROP COLUMN column_name

Android

1. Broadcast的分类?有序,无序?粘性,非粘性?本地广播?

2. Android中的事件传递机制?

当我们的手指触碰到屏幕,事件是按照Activity->ViewGroup->View这样的流程到达最终响应触摸事件的View的。而在事件分发过程中,涉及到三个最重要的方法:dispatchTouchEvent()、onInterceptTouchEvent()、onTouchEvent。我们的手指触摸到屏幕的时候,会触发一个Action_Down类型的事件,当前页面的Activity会首先做出相应,也就是说会走到Activity的dispatchTouchEvent()方法内。在这个方法内部有下面两个逻辑:

通常情况下,ViewGroup 的 onInterceptTouchEvent() 都返回 false,表示不拦截。这里需要注意的是事件序列,比如Down事件、Move事件…Up事件,从 Down到 Up 是一个完整的事件序列,对应着手指从按下到抬起这一系列事件,如果ViewGroup 拦截了 Down 事件,那么后续事件都会交给这个 ViewGroup 的onTouchEvent。如果 ViewGroup 拦截的不是 Down 事件,那么会给之前处理这个Down 事件的 View发送一个Action_Cancel 类型的事件,通知子View这个后续的事件序列已经被 ViewGroup 接管了,子 View 恢复之前的状态即可。

这里举一个常见的例子:

有时候会有人混淆onTouchEvent和onTouch。首先,这两个方法都在View的dispatchTouchEvent()中:

最后附上流程图总结:

touch事件传递流程

3. Handler的原理?

与Handler密切相关的还有Message、MessageQueue、Looper。

4. ANR出现的情况有几种? 怎么分析解决ANR问题?

ANR(Application Not responding)。Android中,主线程(UI线程)如果在规定时内没有处理完相应工作,就会出现ANR。具体来说,ANR会在以下几种情况中出现:

(1) 输入事件(按键和触摸事件)5s内没被处理

(2) BroadcastReceiver的事件(onRecieve方法)在规定时间内没处理完(前台广播为10s,后台广播为60s)

时内没有处理完相应工作,就会出现ANR。具体来说,ANR会在以下几种情况中出现:

(1) 输入事件(按键和触摸事件)5s内没被处理

(2) BroadcastReceiver的事件(onRecieve方法)在规定时间内没处理完(前台广播为10s,后台广播为60s)

标签:ViewGroup,广播,onTouchEvent,开发技术,消息,2020,事件,Android,View
来源: https://blog.csdn.net/m0_64314432/article/details/121589833