1.描述你知道的Android机型适配方案:

答:1.Linearlayout的weiget属性;2.res目录下自定义各种不同机型尺寸的values包中的dimens.xml文件;3.今日头条开源的一套屏幕适配方案(https://www.jianshu.com/p/4aa23d69d481)

2.Android原生的表情符Emoji有没有使用过,编码类型的表情符。

3.什么是多进程?多进程开启的方式是?

答:进程一般指一个执行单元,在移动设备上就是一个程序或应用,我们在Android中所说的多进程(IPC)一般指一个应用包含多个进程。之所以要使用多进程有两方面原因:某些模块由于特殊的需求要运行在单独的进程;增加应用可用的内存空间。

Android中开启多线程只有一种方法,就是在AndroidManifest.xml中注册Service、Activity、Receiver、ContentProvider时指定android:process属性,例如:

android:name=".MyService"

android:process=":remote">

android:name=".MyActivity"

android:process="com.shh.ipctest.remote2">

我们为MyService和MyActivity指定的android:process属性值有所不同,它们的区别如下:

:remote:以:开头是一种简写,系统会在当前进程名前附件当前包名,完整的进程名为:com.shh.ipctest:remote,同时以:开头的进程属于当前应用的私有进程,其它应用的组件不能和它跑在同一进程。

com.shh.ipctest.remote2:这是完整的命名方式,不会附加包名,其它应用如果和该进程的ShareUID、签名相同,则可以和它跑在同一个进程,实现数据共享。

4.多进程引发的问题有哪些?

开启多进程虽简单,但会引发如下问题,必须引起注意。

静态成员和单例模式失效

线程同步机制失效

SharedPreferences 可靠性降低

Application 被多次创建

对于前两个问题,可以这么理解,在Android中,系统会为每个应用或进程分配独立的虚拟机,不同的虚拟机自然占有不同的内存地址空间,所以同一个类的对象会产生不同的副本,导致共享数据失败,必然也不能实现线程的同步。

由于SharedPreferences底层采用读写XML的文件的方式实现,多进程并发的的读写很可能导致数据异常。

Application被多次创建和前两个问题类似,系统在分配多个虚拟机时相当于把同一个应用重新启动多次,必然会导致 Application 多次被创建,为了防止在 Application

中出现无用的重复初始化,可使用进程名来做过滤,只让指定进程的才进行全局初始:

public class MyApplication extends Application{

@Override

public void onCreate() {

super.onCreate();

String processName = "com.shh.ipctest";

if (getPackageName().equals(processName)){

// do some init

}

}

}

5.Android中的多进程通信方式?

答:Android中支持的多进程通信方式主要有以下几种,它们之间各有优缺点,可根据使用场景选择选择:

AIDL功能强大,支持进程间一对多的实时并发通信,并可实现 RPC (远程过程调用)。

Messenger:支持一对多的串行实时通信, AIDL 的简化版本。

Bundle:四大组件的进程通信方式,只能传输 Bundle 支持的数据类型。

ContentProvider:强大的数据源访问支持,主要支持 CRUD 操作,一对多的进程间数据共享,例如我们的应用访问系统的通讯录数据。

BroadcastReceiver:即广播,但只能单向通信,接收者只能被动的接收消息。

文件共享:在非高并发情况下共享简单的数据。

Socket:通过网络传输数据。

6.关于线程安全问题。

线程安全的定义

线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的,或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题 。

Android的单线程模型

当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程。默认的情况下,所有该程序的组件都将在该进程和线程中运行 。主线程(Main Thread)主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事 件,并把相关的事件分发到对应的组件进行处理。所以主线程通常又被叫做UI线程。

系统不会为每个组件单独创建线程,在同一个进程里的UI组件都会在UI线程里实例化,系统对每一个组件的调用都从UI线程分发出去。结果就是,响应系统回调的方法(比如响应用户动作的onKeyDown()和各种生命周期回调)永远都是在UI线程里运行。

UI线程才能与Android UI工具包中的组件进行交互,在开发Android应用时必须遵守单线程模型的原则:

1. Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。

2.不要阻塞UI线程。

为什么说Android UI不是线程安全的?

android UI 中提供invalidate()来更新界面,而invalidate()方法是线程不安全。

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在非UI主线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。例如:在非UI线程中调用invalidate会导致线程不安全,也就是说可能在非UI线程中刷新界面的时候,UI线程(或者其他非UI线程)也在刷新界面,这样就导致多个界面刷新的操作不能同步,导致线程不安全

android面试经典,Android经典面试题集锦(一)相关推荐

  1. 【Android面试】Android面试题集锦 (陆续更新)

    [Android面试]Android面试题集锦 (陆续更新) 分类: [杂七杂八]2011-05-11 17:58 2064人阅读 评论(0) 收藏 举报 一些常见的Android面试基础题做下总结, ...

  2. 【Android面试】Android面试题集锦 (陆续更新)(最新2012-6-18)

    1.android开发新浪面试题[开发者必看哦] 下载地址 http://www.eoeandroid.com/thread-177885-1-1.html 2.华为关于android笔试题案例解析 ...

  3. 【Android面试】Android面试题集锦 (陆续更新)(最新2012-6-18) eoe上看到的

    ===============eoeAndroid社区推荐:======================= 1.Android开发新浪面试题[开发者必看哦] 下载地址 http://www.eoean ...

  4. Android 面试 - 有关Service的面试题

    1.Service是什么 Service(服务)是一个可以在后台执行长时间运行操作而没有用户界面的应用组件. 注:Service是运行在主线程中的,不能进行耗时操作 2.Service和Thread的 ...

  5. 【Android面试】Android中高级开发面试必问,7年外包一飞冲天

    Andorid 开发在前两年也非常火热,但随着客户端开发招聘回归理性,行业已经越来越成熟,岗位招聘也就自然而然地变"卷"了.这一点,身为程序员老鸟的我深有体会. 年初,我就开始投递 ...

  6. Android 面试(Android 篇)

    Android 面试 安卓篇 一.跨进程通信的几种方式 二.多进程应用使用场景 三.Binder 机制 (进程间的通信) 四.说一说 ANR 五.什么是OOM,如何避免解决 六.内存泄露,内存溢出,内 ...

  7. android面试 handler,Android面试之Handler相关学习

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? ###Android面试之Handler相关学习 1.Android消息机制之Looper.java源代码学习 1). ...

  8. 腾讯T3大牛亲自教你!2021大厂Android面试经验,经典好文

    本篇将由 环境搭建.实现原理.编程开发.插件开发.编译运行.性能稳定.发展未来 等七个方面,对当前的 React Native 和 Flutter 进行全面的分析对比,希望能给你更有价值的参考. 前言 ...

  9. 2021大厂Android面试经验,经典好文

    本篇将由 环境搭建.实现原理.编程开发.插件开发.编译运行.性能稳定.发展未来 等七个方面,对当前的 React Native 和 Flutter 进行全面的分析对比,希望能给你更有价值的参考. 前言 ...

  10. 准备Android面试?Android开发真等于废人?复习指南

    前言 相信很多同学都会有这样的感受,前三天刚刚复习的知识点,今天问的时候怎么就讲不出个所以然了呢? 本文的目的就是致力于帮助大家尽可能的建立Android知识体系,希望大家会喜欢~ 不清楚你是不是知道 ...

最新文章

  1. 自我审视记录本_春天重新审视战略模式
  2. Java遍历Map的4种方式
  3. android 怎么自定义任务栈,Android中的Activity详解--启动模式与任务栈
  4. 开源的excel读取库libxls在windows下的编译,且支持中文,全网首发
  5. Seata 与 Nacos Config配置中心整合_03
  6. itchat库微信自动回复祝福语
  7. FabFilter Total Bundle 2021 Mac - 经典音频效果器合集
  8. 关于线程池的一段代码
  9. 【LOJ6713】「EC Final 2019」狄利克雷 k 次根 加强版(狄利克雷生成函数)
  10. WGCNA那么多图,都啥意思? 官网
  11. css实现 元素/图片上下跳动 左右跳动 css动画
  12. 大数据:Hive - ORC 文件存储格式
  13. 走进JavaWeb技术世界16:极简配置的SpringBoot
  14. 项目案例:基于 YOLO 的铝型材表面缺陷识别
  15. IDEA如何创建web项目
  16. MHDD使用教程图解二
  17. html中a标签用法
  18. 纯css实现扁平化360卫士logo demo
  19. 金融行业红蓝对抗演习解决方案
  20. 学习英语每日一 On the house. 赠品

热门文章

  1. 6章:常用工具类以及函数
  2. 【分布式系统工程实现】系统可扩展性演化
  3. IIS 7.0 SSL 部署指南
  4. 加载图片时报错,请大虾帮忙看看!
  5. android webview 弹出浏览器,android – 防止WebView打开浏览器
  6. linux bsd命令,科学网—Linux/BSD下join命令使数据以tab为分隔符的方法 - 李雷廷的博文...
  7. mysql怎样循环执行存储_mysql 循环存储过程
  8. 在linux中at 调度出错,linux系统中的调度延迟任务:at 命令
  9. linux配置sonarqube遇到的坑
  10. android uri跳转导航,android:scheme 通过uri跳转到APP应用指定Activity