小言_互联网的博客

Android开发问题集(八)

590人阅读  评论(0)

问题一、Android 平台显示单位 px 和 dip 以及 sp 有什么区别?

很多网友可能发现在 Android 的 layout 文件中 layout_width 或 layout_height 有时候可能会指定具体的单位,比如有时候为 px、dip 或者 sp 等等。下面把常见的单位做下简单的介绍,比如说:

px (pixels)像素 – 一般我们 HVGA 代表 320x480 像素,这个用的比较多。

dip 或 dp (device independent pixels)设备独立像素 – 这个和设备硬件有关, 为了支持WVGA、HVGA 和 QVGA cwj 推荐使用这个,不依赖像素。

sp (scaled pixels — best for text size)放大像素-- 主要处理字体的大小。

下面的几个是不常用的,大家也知道这里就不再过多的赘述。
in (inches)英寸
mm (millimeters)毫米
pt (points)点

问题二、如何判断 Android 手机当前是否联网?

如果拟开发一个网络应用的程序,首先考虑是否接入网络,在 Android 手机中判断是否联网可以通过 ConnectivityManager 类的 isAvailable()方法判断,首先获取网络通讯类的实例 ConnectivityManager cwjManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVI CE); ,使用 cwjManager.getActiveNetworkInfo().isAvailable(); 来返回是否有效, 如果为 True 则表示当前 Android 手机已经联网,可能是 WiFi 或 GPRS、HSDPA 等等,具 体的可以通过ConnectivityManager 类的 getActiveNetworkInfo() 方法判断详细的 接入方式,需要注意的是有关调用需要加入这个权限,提醒大家在真机上 Market 和 Browser 程序都使用了这个方法,来判断是否继续,同时在一些网络超时的时候也可以检查下网络连接是否存在,以免浪费手机上的电力资源。

问题三:Android 中 XML 布局文件@+id/和@id/的区别是什么?

在 Android 平台中很多地方时新定义的,对于新手来说可能发现在 layout.xml 这样的 xml 布局文件中发现了,类似@+id/和@id/到底有什么区别呢? 这里@我们可以理解为引用,而多出的+代表自己新声明的。

问题四:Drawable、Bitmap、Canvas 和 Paint 是什么关系?

很多网友刚刚开始学习 Android 平台,对于 Drawable、Bitmap、Canvas 和 Paint 它们之间的概念不是很清楚,其实它们除了 Drawable 外早在 Sun 的 J2ME 中就已经出现了,但是在 Android 平台中,Bitmap、Canvas 相关的都有所变化。
首先让我们理解下 Android 平台中的显示类是 View,但是还提供了底层图形类 android.graphics,今天所说的这些均为 graphics 底层图形接口。
Bitmap - 称作位图,一般位图的文件格式后缀为 bmp,当然编码器也有很多如 RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。
Drawable - 作为 Android 平下通用的图形对象,它可以装载常用格式的图像,比如 GIF、PNG、JPG,当然也支持 BMP,当然还提供一些高级的可视化对象,比如渐变、 图形等。
Canvas - 名为画布,我们可以看作是一种处理过程,使用各种方法来管理 Bitmap、 GL 或者 Path 路径,同时它可以配合 Matrix 矩阵类给图像做旋转、缩放等操作,同时 Canvas 类还提供了裁剪、选取等操作。
Paint - 我们可以把它看做一个画图工具,比如画笔、画刷。他管理了每个画图工具的字体、颜色、样式。
如果涉及一些 Android 游戏开发、显示特效可以通过这些底层图形类来高效实现自己的应用。

问题五:Logcat 显示中文为乱码,这是为什么?

很多在开发调试 Android 软件的网友可能会发现 Logcat 打印中文输出的为乱码, 即使是设置 DDMS 的字符集为 UTF-8 问题依旧,参考 Logcat 无法显示中文输出 ,这里给网友几个 Logcat 调试的替代方法。
一、简单调试
我们自己封装一个 Toast 调试显示类即可,但 Toast 的显示速度和开销相对较高, 每次显示从底层来看均为线程处理,资源有些浪费,不过常规的提示性可以使用 Toast.makeText 这种方法来显示结果,目前来看还从来没有遇到中文显示乱码的情况。 当然这种方法解决也有局限性无法显示,涉及到 Context 问题,有些情况下如果数据量 过多,或性能敏感的调试就需要考虑使用下一种方法了。
二、Log 文件类
自己定义一个文件类,我们通过生成 TXT 文本的方式来调试 Android 程序代替 Logcat,但是同样的方法牵扯到 I/O,读写 rom 或 sdcard 都会造成很多的性能影响,那 么处理的方法很简单,定义一个临时变量,我们以缓存的方法来一次性写入,当然是用 Java 提供我们的 BufferedoutputSream 类来一次性输出也是不错的选择。
这个问题的原因主要是 android 内核的再 logcat 源码中处理编码上没有考虑字符 集,可能也是考虑到效率问题,不过在调试一些 xml 文件时可能 Log 文件类是最好的方 法了。

问题六、Android老版本项目导入到新版的时候为什么SDK提示错误?

很多网友可能使用过去 Android 1.1 或 1.5 版 SDK 开发的项目导入到使用新版 ADT 插件的 1.6 或 2.0.1 项目中可能会发现报错,其实谷歌给我们提供了一个工具可以解决这个问题,在 Package Explorer 中选择项目,单击鼠标右键在弹出的下拉菜单中选择 Android Tools - Fix Project Properties 即可发现一些文件解决了,同时新版本的 ADT 插件需要注意 API Level

问题七、does not declare uses-library android.test.runner 这是怎么回事?

部分网友可能在平时 Android 开发时突然执行程序,出现了 Application does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-library android.test.runner 的错误提示,这主要是你再 Run As 中错 误的选择了目标为 Android JUnit Test 这项导致的,解决的方法也很简单在 Run Dialog 中删除 JUnit Test 这条即可.

问题八、INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 错误解决方法是什么?
部分可能在安装 APK 文件时出现类似INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 的提示,同时类似的提示如下:
Android Launch!
adb is running normally.
Performing com.tony.CWJ activity launch
Automatic Target Mode: using device ‘HT840GZ25974’
Uploading CWJ.apk onto device ‘HT840GZ25974’
Installing CWJ.apk…
Application already exists. Attempting to re-install instead…
Re-installation failed due to different application signatures.
You must perform a full uninstall of the application. WARNING: This will remove the application data!
Please execute ‘adb uninstall com.tony.CWJ’ in a shell.
Launch canceled!
这样的问题主要是签名冲突造成的,比如你使用了 ADB 的 debug 权限签名,但后来 使用标准 sign 签名后再安装同一个文件会出现这样的错误提示,解决的方法除了只有 先老老实实从手机上卸载原有版本再进行安装,而 adb install -r 参数也无法解决这 个问题。

问题九、Android 真的适合做 netbook 吗?

Android 操作系统目前已经被 Google 开始扩展到更多的应用领域,已经有不少 PC 生产制造商开始评估 Android 的各项能力,华硕、惠普、宏碁都开始研发 Android 上网本,目前最大的问题仍然软件兼容性,过去销售的上网本产品中包含了 Linux 和 Windows 两个平台,后者虽然价格略高但功能和用户体验度高出很多,而 Linux 上网本的技术支持等问题导致部分厂商已经停产,面对 netbook 市场上已经有 90%以上使用 Windows 操 作系统的情况,Google 目前的系统还有很多路需要走。
Android 上网本问题何在?

  1. 硬件成本仍然不小,虽然操作系统没有微软那样的授权费用,但是运行 Java 程 序,Dalvik VM 的效率和资源占用都是很高的,平时一些底层的事情可以由第三方厂商 解决,而现在变成必需封装好后以 Java 的形式提供给开发人员,这点微软做得很好, 首先提供 CAPI 然后推向到.Net Framework 上可以有选择去做。
  2. 硬件和软件中间层驱动支持不好,很多设备都需要驱动,Linux 系统中比较完善 的除了文件系统外、网卡驱动还算可以,但在显示、音乐、USB 外围设备上和 Windows 的差距很多,目前虽然 Android 支持触控操作,但是目前还没有出现鼠标的支持。
  3. 软件问题,虽然在 Android Market 上能够找到很多免费软件,但是整体的质量 都不是很乐观,同时和微软 Windows 相比,竞争力将会大幅缩水,在 Windows 可以玩的 游戏几乎没有可以考虑在 Linux 的 netbook 上使用。

目前我们看到,唯一选择 Linux 内核系统上网本用户群可能是除非价格很有优势, 否则当作类似 PC 那么用的话竞争力不是很大,不过作为一般的廉价查询机,访问 Web 网页还是没有问题的。

问题十、Android 定制 Home Screen 相关问题

1.Android 上的 Home Screen(桌面屏幕)如何添加 Widget,常规的 Android 系统我 们只能通过在桌面上按下 Menu 键,在 Add 中找到 Widget 项中的 clock、search 以及 photoframe,但我们不能添加其他的 widget。
2.自己如何定制 Home,直接修改 Android 的 git 源码中的 Launcher.git 包即可, 在长按 Home 键时由于都触发了 android.intent.category.HOME 这个 action 系统会提 示添加。
3.自定义Home可以有什么好处,比如增加桌面上应该有的比如类似Windows Mobile 的 Today 屏幕或 Symbian S60 5th 的 Widgets 等等,Android 开源的好处和让我们很好 的定制,比如中国移动 oms 操作系统就是采用类 iPhone 方式的定制版桌面
4.设计一个 Home 一般需要处理哪些事情:

  1. 快捷方式添加、删除 2) 设置壁纸 3)对象移动 4)Widget 可以通过一个接口来 提供二次开发,最终 Google 应该会提供更多的主题、以及更多实用的功能在桌面上, 比如天气框等等。

转载:https://blog.csdn.net/weixin_45574883/article/details/102718003
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场