`
jgsj
  • 浏览: 949153 次
文章分类
社区版块
存档分类
最新评论

Android 面试精华题目总结

 
阅读更多

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24015867


下面的题目都是楼主在android交流群大家面试时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖。


1、请解释下在单线程模型中Message,Handler,Message Queue,Looper之间的关系。

拿主线程来说,主线程启动时会调用Looper.prepare()方法,会初始化一个Looper,放入Threadlocal中,接着调用Looper.loop()不断遍历Message Queue,

Handler的创建依赖与当前线程中的Looper,如果当前线程没有Looper则必须调用Looper.prepare()。Handler , sendMessage到MessageQueue,Looper不断

从MessageQueue中取出消息,回调handleMessage方法。


2、如果有个100M大的文件,需要上传至服务器中,而服务器form表单最大只能上传2M,可以用什么方法。

这个问题不是很明确我觉得,首先来说使用http协议上传数据,特别在android下,跟form没什么关系。传统的在web中,在form中写文件上传,其实浏览器所做

的就是将我们的数据进行解析组拼成字符串,以流的方式发送到服务器,且上传文件用的都是POST方式,POST方式对大小没什么限制。

回到题目,可以说假设每次真的只能上传2M,那么可能我们只能把文件截断,然后分别上传了。


3、内存溢出和内存泄漏有什么区别?何时会产生内存泄漏?内存优化有哪些方法?

内存溢出通俗理解就是软件(应用)运行需要的内存,超出了它可用的最大内存。

内存泄漏就是我们对某一内存空间的使用,使用完成后没有释放。

内存优化:Android中容易内存溢出的部分,就是图片的加载,我们可以使用图片的压缩加上使用LruCache缓存的目的来控制图片所能够使用的内存。

还有对于比较耗资源的对象及时的关闭,例如Database Conn , 各种传感器 , Service 等等。


4、AsyncTask使用在哪些场景?它的缺陷是什么?如何解决?

AsyncTask 运用的场景就是我们需要进行一些耗时的操作,耗时操作完成后更新主线程,或者在操作过程中对主线程的UI进行更新。

缺陷:AsyncTask中维护着一个长度为128的线程池,同时可以执行5个工作线程,还有一个缓冲队列,当线程池中已有128个线程,缓冲队列已满时,如果

此时向线程提交任务,将会抛出RejectedExecutionException。

解决:由一个控制线程来处理AsyncTask的调用判断线程池是否满了,如果满了则线程睡眠否则请求AsyncTask继续处理。


5、Activity用SharedPreferences保存数据,大小有木有限制?

这个真心查不到。。。


6、Activity间通过Intent传递数据大小有没有限制?

貌似是40K。


7、assest文件夹里放文件,对于文件的大小有没有限制?22

assets目录更像一个附录类型的目录,Android不会为这个目录中的文件生成ID并保存在R类当中,因此它与Android中的一些类和方法兼容度更低。

同时,由于你需要一个字符串路径来获取这个目录下的文件描述符,访问的速度会更慢。但是把一些文件放在这个目录下会使一些操作更加方便,

比方说拷贝一个数据库文件到系统内存中。要注意的是,你无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问

这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。另外,网上关于assets和raw的资料都千篇一律了,因此关于这两者中单个文件

大小不能超过1M的**错误**描述也在传播,即如果读取超过1M的文件会报"Data exceeds UNCOMPRESS_DATA_MAX (1314625 vs 1048576)"的

IOException,还引申出种种解决方案。个人认为不应该有这样的限制,为了验证这个说法写了个Demo,发现将近5M的压缩包在assets和raw中

都能正常访问,因此在这里纠正一下,理论上只要打包不超过Android APK 50M大小的限制都是没有问题的。当然了,不排除是Android很早期的

时候因为设备硬件原因aapt在编译的时候对这两个文件夹大小做出了限制,如果是这样,较新版的ADT应该不会出现这种情况。

来自:http://my.eoe.cn/futurexiong/archive/5350.html


8、启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?

是因为启动程序(主界面也是一个app),发现了在这个程序中存在一个设置为<category android:name="android.intent.category.LAUNCHER" />的activity,

所以这个launcher会把icon提出来,放在主界面上。当用户点击icon的时候,发出一个Intent:

Intent intent = mActivity.getPackageManager().getLaunchIntentForPackage(packageName);

mActivity.startActivity(intent);

跳过去可以跳到任意允许的页面,如一个程序可以下载,那么真正下载的页面可能不是首页(也有可能是首页),这时还是构造一个Intent,startActivity.

这个intent中的action可能有多种view,download都有可能。系统会根据第三方程序向系统注册的功能,为你的Intent选择可以打开的程序或者页面。所以唯一的一点

不同的是从icon的点击启动的intent的action是相对单一的,从程序中跳转或者启动可能样式更多一些。本质是相同的。


9、程序之间的亲和性的理解。

1、默认情况下一个应用的所有Activity都是具有相同的affinity,都是从application中继承,application的affinity默认就是manifest的包名。

2、affinity对Activity来说,就像是身份证一样,可以告诉所在的Task,自己属于其中的一员。

3、应用场合:

a:根据affinity重新为Activity选择合适的宿主Task;

b:与allowTaskReparenting属性配合;

c:启动Activity使用Intent设置了FLAG_ACTIVITY_NEW_TASK标记。


10、同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?

可以放在不同的Task中。需要为不同的activity设置不同的affinity属性,启动activity的Intent需要包含FLAG_ACTIVITY_NEW_TASK标记。


11、横竖屏切换时候Activity的生命周期。

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法


12、AIDL的全称是什么?如何工作?

全称是:Android Interface Define Language

在Android中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到Service.在不同的进程中, 怎样传递对象呢? 显然, Java中不允许跨进程内存共享.

因此传递对象, 只能把对象拆分成操作系统能理解的简单形式, 以达到跨界对象访问的目的. 在J2EE中,采用RMI的方式, 可以通过序列化传递对象. 在Android中, 则

采用AIDL的方式. 理论上AIDL可以传递Bundle,实际上做起来却比较麻烦。

AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要

在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数), 然后使用AIDL来传递这些参数, 在消息的接收端, 使用

这些参数组装成自己需要的对象.AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 如果要使用AIDL,

需要完成2件事情: 1. 引入AIDL的相关类.; 2. 调用aidl产生的class.

AIDL的创建方法:

AIDL语法很简单,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值。 由于远程调用的需要, 这些参数和返回值并不是任何类型.

下面是些AIDL支持的数据类型:

1. 不需要import声明的简单Java编程语言类型(int,boolean等)

2. String, CharSequence不需要特殊声明

3. List, Map和Parcelables类型, 这些类型内所包含的数据成员也只能是简单数据类型, String等其他比支持的类型.

(另外: 我没尝试Parcelables, 在Eclipse+ADT下编译不过, 或许以后会有所支持



13、dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

Dvm的进程是dalivk虚拟机进程,每个android程序都运行在自己的进程里面,每个android程序系统都会给他分配一个单独的liunx uid(user id),
每个dvm都是linux里面的一个进程.所以说这两个进程是一个进程.



先把题目贴上,一会开始想办法收集答案~欢迎留言~



分享到:
评论

相关推荐

    Linux操作系统学习笔记整理.docx

    linux操作系统

    pyinstaller-6.4.0-py3-none-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    智慧账务报账服务平台解决方案ppt.zip

    在当今数字化时代,企业财务管理正经历着一场革命性的变革。"智慧账务报账服务平台解决方案ppt.zip"便是这一变革的先锋代表,它不仅仅是一个文档或PPT,而是一套完整的、智能化的企业财务解决方案。该平台利用最新的云计算技术、大数据分析、人工智能以及机器学习算法,为企业提供了一个高效、精准、便捷的报账和财务管理体系。这套解决方案专为满足现代企业复杂多变的财务需求而设计,其核心在于自动化和智能化。通过自动识别票据信息、智能审核报账单据、实时监控财务流程等功能,极大地减少了人工操作,降低了错误率,提高了工作效率。同时,平台的数据分析功能能够为企业提供深入的财务洞察,帮助企业制定更为科学的财务决策。此外,该解决方案还具备强大的可扩展性和安全性,能够适应不同规模和类型的企业需求,确保财务数据的安全和隐私。无论是在招投标过程中展示企业的创新能力,还是在日常运营中提升财务管理水平,"智慧账务报账服务平台解决方案ppt.zip"都是企业数字化转型不可或缺的伙伴。综上所述,这个解决方案不仅仅是一个智慧财务的工具,更是企业向数字化管理转型的桥梁,它能够帮助企业实现财务管理的现代化,提升竞争力,迎接未来挑战

    使用Koopman算子理论对Chemostat模型进行数据驱动建模matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    微波炉行业分析:2023年中国微波炉出口量同比增长8.7%(简报).pdf

    QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com

    数据库系统概论介绍分享

    数据库系统概论。数据库系统概论主要介绍数据库系统的基本概念、原理、技术和应用。以下是关于数据库系统的一些重要概念和介绍: 数据(Data):描述事物的符号记录,可以是数字、文字、图形、图像、声音等。数据与其语义是不可分的,即数据的含义与其表示形式密切相关。 数据库(Database):长期存储在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。数据库具有永久存储、有组织和可共享三个基本特点。

    机器人研究资料-11份-2023.5月

    机器人研究资料_11份_2023.5月

    蓝牙调试器.jpg

    蓝牙调试器.jpg

    scratch3源码happynewyear

    scratch3源码happy new year本资源系百度网盘分享地址

    2010年全国研究生数学建模竞赛优秀论文选-10291003B.pdf

    华为杯数学竞赛获奖论文,历届,研究生数学,内容丰富,大学生数学,数学竞赛,参考资料,极具参考价值

    pyinstaller-5.9.0.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    波兰表达式求值的代码.cpp

    题目描述 波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的波兰表示法为+ 2 3。波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。 输入 输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。 输出 输出为一行,表达式的值。 可直接用printf("%f\n", v)输出表达式的值v。 样例输入 * + 11.0 12.0 + 24.0 35.0 样例输出 1357.000000

    nacos注册中心入门图

    nacos注册中心入门

    【精选资料】NOIP初赛提高组Pascal试题及答案.pdf

    全国信息学奥林匹克联赛,计算机编程,论文,历届,信息技术比赛,参考资料,极具学习价值

    STM32单片机FPGA毕设电路原理论文报告基于微机和单片机的图像浮雕控制系统

    STM32单片机FPGA毕设电路原理论文报告基于微机和单片机的图像浮雕控制系统本资源系百度网盘分享地址

    pyinstaller-5.8.0-py3-none-manylinux2014_s390x.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    JavaScript的常用语句

    javascript

    scratch3源码泡泡堂

    scratch3源码泡泡堂本资源系百度网盘分享地址

    《CIPS信息交换规范》是CIPS标准体系重要的组成部分

    《CIPS信息交换规范》是CIPS标准体系重要的组成部分。《CIPS信息交换规范》参考业务需求、业 务规则及相关设计文档编写,通过分类别介绍CIPS报文标准,帮助用户更好地了解CIPS相关业务及对应 的报文结构和报文栏位填写规则,并指导CIPS系统的开发人员和业务人员依照报文标准开展相关工作。 CIPS信息交换规范 第1部分:总则.pdf CIPS信息交换规范 第2部分:系统与管理类.docx CIPS信息交换规范 第2部分:系统与管理类.pdf CIPS信息交换规范 第3部分:支付类(资金清算).docx CIPS信息交换规范 第3部分:支付类(资金清算).pdf CIPS信息交换规范 第4部分:支付类(信息传输).docx CIPS信息交换规范 第4部分:支付类(信息传输).pdf CIPS信息交换规范 第4部分:支付类(信息传输)报文结构.xlsx CIPS信息交换规范 第5部分:贸易金融类(信用证).docx CIPS信息交换规范 第5部分:贸易金融类(信用证).pdf

    超市项目可行性报告.rar

    超市项目可行性报告.rar是一个针对大学生创业计划的详细分析文档,它旨在评估开设一家超市在当前市场环境中的潜力和盈利前景。这份报告通过综合研究市场需求、竞争状况、财务预算、风险因素以及营销策略等多个维度,为创业者提供一个实际可行的商业模型。报告中首先分析了当地市场的消费者需求和购买行为,确保了超市的商品组合与服务能够满足目标顾客的需求。同时,通过对周边竞争对手的调研,报告提出了差异化经营策略,以获得市场优势。在财务部分,报告细致地构建了初步的投资预算和运营成本估算,包括启动资本、固定开支、变动成本等,进而制定了合理的价格策略和销售目标。此外,通过现金流量预测和盈亏平衡点分析,报告揭示了项目的财务可持续性和盈利潜力。考虑到风险管理,报告不仅识别了可能影响超市成功的潜在风险,如供应链中断、顾客流量减少等,还提供了相应的缓解措施,以确保项目能够应对不确定性挑战。最后,报告概述了一系列创新的营销和推广策略,包括社交媒体宣传、忠诚度计划和社区参与活动,以建立品牌知名度并吸引顾客。综上所述,超市项目可行性报告.rar为有志于进入零售行业的大学生提供了一个全面、系统的创业方案,是他们迈向成功创业之路

Global site tag (gtag.js) - Google Analytics