安卓面试基础知识总结(4)

2019-04-01 16:14

2. 可以在任何地方获取数据但应该在另外一个地方请求数据

3. 在主界面的线程中提交适配器的变化并调用notifyDataSetChanged()方法

8.2 ListView的图文混合显示

8.2.1 异步加载图片基本思想:

1.先从内存缓存中获取图片显示(内存缓冲) 2.获取不到的话从SD卡里获取(SD卡缓冲)

3.都获取不到的话从网络下载图片并保存到SD卡同时加入内存并显示(视情况看是否要显示) 8.2.2 具体优化

优化一:先从内存中加载,没有则开启线程从SD卡或网络中获取,这里注意从SD卡获取图片是放在子线程里执行的,否则快速滑屏的话会不够流畅。

优化二:在adapter里新建一个busy变量,表示listview是否处于滑动状态,如果是滑动状态则仅从内存中获取图片,没有的话无需再开启线程去外存或网络获取图片。

优化三:利用线程池在从网络获取图片时,先是将其保存到sd卡,然后再加载到内存,这么做的好处是在加载到内存时可以做个压缩处理,以减少图片所占内存

资料与源码实现(见附件) 8.2.3 关于图片错位的处理

图片错位问题的本质源于我们的listview使用了缓存convertView,假设一种场景,一个listview一屏显示九个item,那么在拉出第十个item的时候,事实上该item是重复使用了第一个item,也就是说在第一个item从网络中下载图片并最终要显示的时候其实该item已经不在当前显示区域内了,此时显示的后果将是在可能在第十个item上输出图像,这就导致了图片错位的问题。所以解决之道在于可见则显示,不可见则不显示。在ImageLoader里有个imageViews的map对象,就是用于保存当前显示区域图像对应的url集,在显示前判断处理一下即可。

9 JNI

9.1 快速智能开发步骤

1. 配置NDK目录结构(只需一次)

2. 添加本地支持:右键选中工程,Android Tools—>Add native support 3. 将cpp代码改成c代码,注意Android.mk文件也要修改,刷新工程,删

除obj目录 4. 声明本地方法,实现对应c代码实现:Javah+全类名 生成本地方法标头

文件,把头文件剪切到jni目录下,c代码引用头文件,实现头文件里的方法。

5. 实现对应的c代码

6. 交叉编译,一锤子敲下去

7. 使用静态代码块,引用库函数,调用方法

9.2 开发中常见的JNI问题

9.2.1 错误一

10-31 06:42:33.645: E/AndroidRuntime(805): java.lang.UnsatisfiedLinkError: Native method not found:

com.example.ndk2.MainActivity.hello_From_C:()Ljava/lang/String;

1. 引入的函数库名字不对,或者没有引入 2. java方法和c方法不对应 3. 部署的平台有问题 9.2.2 错误二

当前工程报错,但是没有任何文件有错误,有可能Android.mk有问题 在Android.mk文件中 不要用到全角空格或者回车 9.2.3 错误3

在C代码中有编译时异常 , 在控制台上会提示

9.2.4 错误4

10-31 06:53:23.165: A/libc(2075): Fatal signal 11 (SIGSEGV) at 0x476a415c (code=2), thread 2075 (om.example.ndk2)

下面打印一大堆debug信息 C代码中 有运行时异常

9.3 应用场景

1. 2. 3. 4. 5.

输出日志

收集用户反馈信息 用户登录 加密算法 电商数据加密

10 静默安装

10.1 方式一:定制ROM

Google的安全策略要求任何应用应该提示APK安装包的权限,对于一些内置特定厂商应用,可以跳过安装过程的信息加快安装,或者运营商强制安装。

10.2 方式二:查看系统源码

10.2.1 基本原理

在窗口中点击一个APK时,触发单击事件,PackageInstaller接收系统服务PackageManagerService传来的intent信息,传来的Intent信息中有APK的一些参数。实现的关键是区分一般APK和特定APK。

通过传给PackageManagerService的intent中添加特别的参数,PackageInstaller接收后进行判断,进行特别的隐藏安装流程。这个实现只能通过程序调用的方式安装。

安装过程的信息窗口在PackageInstallActivity.java中实现的。安装过程的信息窗口有4个:需要实现一个PakkageInstallActivityHide.JAVA的文件,去掉下面的dialog和窗口

安装权限确认窗口:installPermissionConfirm 安装进度条:installProgress 安装结果窗口:installResult 安装错误提示对话框 10.2.2 具体实现(方法一)

1. 在Androidmainfest.xml声明一个特定的intent:

android.intent.action.VIEW.HIDE,由PackageInstallActivityHide.java

来接受 注意:

2. 3. 4. 5.

实现PakkageInstallActivityHide.java,UninstallerActivityHide.java。 只需把PakkageInstallActivity.java修改去掉dialog和对话框。 安装程序调用者发一个上面定义的intent即可。如下例子,静默安装/sdcard/hello.apk 卸载的方法类似。

注意,这个方法需要PackageInstall这个apk必须与系统一起编译。这个apk在/system/app/目录下面;android.intent.action.VIEW.HIDE 这个静默安装的接口需要开放给第三方。

10.2.3 具体实现(方法二)

1. 从模拟器System\\framework目录下提取framework.jar

2. 将framework.jar后缀名改为zip,解压后提取其中的classes.dex文件 3. 用dex2jar工具将classes.dex转成classes.dex.dex2jar.jar(注意新版本

的dex2jar工具无法转换Android2.2的framework,建议使用dex2jar-0.0.7.8-SNAPSHOT,该工具可以从google官方站上下载到)

4. 将classes.dex.dex2jar.jar改名为classes.dex.dex2jar.zip解压取出

android/content/pm/目录下的PackageManager.class,IPackageInstallObserver.class,IPackageDeleteObserver.class及相关的几个class文件备用

5. 找到android-sdk目录下的android.jar,改名为android.zip(注意改名前

先备份一下),解压后将步骤4中取得的class文件覆盖到android对应的目录下, 6. 这个时候你的android.jar已经是一个更新过的SDK了,重新打开eclipse

工程,你已经可以调用方法:

void android.content.pm.PackageManager.installPackage(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName)

11 Android中数据的存储方式

11.1 方式

1. Shared Preferences:主要用于保存程序的系统配置信息。用来存储

“key-values paires”。一般用于保存程序启动时设定的信息,以便在程序下一次启动时继续保留前一次设定的信息。 2. xml 3. Files:用文件的形式保存信息。可以通过对文件的读写来获取或保存相

关信息。 4. SQLite:用数据库的形式保存信息。SQLite是一个开源的数据库 系统。 5. NetWork:将数据保存于网络。

11.2 区别

1. Shared Preferences:

Android提供用来存储一些简单的配置信息的一种机制,例如,一些默认欢迎语、登录的用户名和密码等。其以键值对的方式存储,

SharedPreferences是以XML的格式以文件的方式自动保存的,在DDMS中的File Explorer中展开到/data/data//shared_prefs下,以上面这个为例,可以看到一个叫做SETTING_Infos.xml的文件 2. Files

在Android中,其提供了openFileInput 和 openFileOuput 方法读取设备上的文件,下面看个例子代码,具体如下所示:

String FILE_NAME = \确定要操作文件的文件名 FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE); //初始化

FileInputStream fis = openFileInput(FILE_NAME); //创建写入流 上述代码中两个方法只支持读取该应用目录下的文件,读取非其自身目录下的文件将会抛出异常。需要提醒的是,如果调用 FileOutputStream 时指定的文件不存在,Android 会自动创建它。另外,在默认情况下,写入的时候会覆盖原文件内容,如果想把

新写入的内容附加到原文件内容后,则可以指定其模式为Context.MODE_APPEND 3. SQLite

SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库 4. NetWork:

将数据上传到网络 补充:

1. Shared Preferences底层使用xml,xml也可以保存数据,但是Shared

Preferences只能保存键值对方式,xml能保存复杂数据

2. Content provider底部还是使用了Sqlite数据库,也是算一种方式。


安卓面试基础知识总结(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2015-2020年中国建筑节能市场研究及投资前景预测报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: