当前位置: 代码迷 >> Android >> android有关问题
  详细解决方案

android有关问题

热度:23   发布时间:2016-05-01 16:22:40.0
android问题

1.Bitmap如何保存成为一个bmp文件

  很多网友可能发现了Android的Bitmap对象无法保存成为一个bmp文件,即提供的方法只有 compress(Bitmap.CompressFormat format, int quality, OutputStream stream) ,可以存为png和jpg,png可能还好说,但是jpg是有损压缩会降低图片的质量,其实Google还提供了一个API在Bitmap类,通过 copyPixelsToBuffer(Buffer dst) 这个方法来解决,Buffer类型,和前几天我们说到的NIO中的ByteBuffer处理方式一样,需要说明的是java中的Buffer在内存中是连续成块的,同时底层有C++支持效率还是很高的。

  通过copyPixelsToBuffer(Buffer dst) 方法将会返回一个RGB8888格式的DIB文件,DIB位图和设备无关,这里教程之家提醒大家,如果想显示出位图,还需要将其加上位图的文件头才行。

? ?? ??2.ByteBuffer的flip,clear及rewind区别

  近期不少网友表示Android的NIO中有关ByteBuffer的几种常用方法比如clear,rewind和flip到底有哪些区别。下面教程之家给大家这三种方法的源码,方便大家记忆。

  1. public final Buffer clear() {??
  2. ? ? position = 0;? ???//设置为0
  3. ? ? limit = capacity;? ? //极限和容量相同
  4. ? ? mark = -1;? ?//取消标记
  5. ? ? return this;??
  6. }?

  7. public final Buffer rewind() {??
  8. ? ? position = 0;??
  9. ? ? mark = -1;??
  10. ? ? return this;??
  11. }?

  12. public final Buffer flip() {??
  13. ? ???limit = position;? ?
  14. ? ???position = 0;??
  15. ? ???mark = -1;??
  16. ? ???return this;??
  17. }??
复制代码

  从上面对比来看flip和rewind的区别就是flip会制定极限和位置相同,所以我们写数据时不多不少正好,而clear则清空缓冲区。

3.Android都支持哪些Java特性


  很多Java SE或EE的程序员想转到Android平台上进行开发,对于Android平台上到底对Java支持有多少呢? 下面教程之家给大家总结下常规的支持:

  目前来看JDK的高级特性均支持,比如说1. Java的反射、2.NIO (New I/O)、3. JNI (Java Native Interface)

  相对而言 对于OpenGL和SQLite的支持比较强大,但是AWT和JDBC这些东西都不支持。

  在Xml解析上,兼容DOM、XmlPull和SAX,同时数据交换格式上,Android虽然不支持LINQ但对于Java来说JSON同样支持。

  对于Http处理方面,提供了轻量级的Http处理类,以及更完善的Apache库支持。

  音频方面Android比较强大,使用了OpenCore库,很多地方我们可以自己编写编码、解码器进行扩展。

  Android在文件系统上基本山和Java是相同的,不过对于高效率的内存影射文件而言提供了android.os.MemoryFile这个类。

  总体而言,Java程序员转入Android开发只需要了解平台特有的,IntentService,Receiver和Activity就差不多了,深入了解下AIDL和UI控件和自定义Widget基本上可以胜任常规的工作。

4.EditText控件无法代码设置ReadOnly只读


  有些网友可能发现Android的EditText控件有个设计bug,就是无法使用Java代码方式设置ReadOnly只读方式,但是 Android123提示大家通过xml代码可以设置 android:editable="false" ,相关的setEnabled方法这里不适用,同时android.text.Editable.Factory也无法设置可编辑,该类相关方法只有 static Editable.Factory getInstance() 和 Editable newEditable(CharSequence source) 两个。

  目前还没有很好的解决方法,EditText控件这种设计缺陷确实比较麻烦,教程之家给大家一个曲线的方法,通过父类TextView的addTextChangedListener(TextWatcher watcher) 方法,设置一个listener监控文字修改后立即恢复原来的内容即可。

? ??5.使用xml让你的Activity无标题方法

? ?? ?近期收到网友的邮件表示如何不在onCreate中设置无标题,其实方法比较简单,这里教程之家给大家一个简单的吧,在 androidmanifest.xml中找到需要设置的Activity,加一个属性内容为 android:theme="@android:style/Theme.NoTitleBar" 即可,比如说 这样子android123_cwj这个窗口在运行时就没有标题了。是不是很简单,同时大家使用onCreate中的Java代码如何设置,注意一定要在setContentView之前执行 requestWindowFeature(Window.FEATURE_NO_TITLE);这句,顺序不要搞颠倒,代码如下:

  1. requestWindowFeature(Window.FEATURE_NO_TITLE);

  2. ? ? setContentView(R.layout.cwj)
复制代码

? ??6.Android应用完全退出终极篇


  很多网友不知道,Android应用如何完全退出,有的网友可能发现Android 2.2中即使使用了Google最新给出的Android 2.2新增API killBackgroundProcesses 方法也无法实现。在J2SE中我们可能使用System.exit(0); 退出,那么我们提到的5种常规方法都无法完全退出怎么办呢?

  今天教程之家给大家介绍一种方法,制造异常退出。

  1. 首先我们可以制造一个空指针的异常,比如TextView.setText方法中执行一个int型的内容,由于setText方法重载了 R.string.xxx这样的资源int型内容,但是我们没有声明这个资源,仅仅把String写成了int的值,就会产生一个异常,这时系统 Dalvik VM会直接关闭你的进程,这招十分有效,CWJ一般平时不公布给大家。

  2. 但是有的网友说了,有Force Close的对话框怎么办,其实我们通过重写Android应用程序的Application基类自己实现 Thread.UncaughtExceptionHandler接口的uncaughtException方法是可以避免出现FC窗口的,用户感觉直接退出了一样。

? ???7.View类中setPadding和setMargins区别

  有网友对View类中提供的setPadding和setMargins两个方法有什么区别不是很了解,其实在Android自绘控件时我们需要计算 控件大小,使用过getMeasuredWidth() 和getMeasuredHeight()方法计算和父容器之间的距离可以用setMargins方法, 对整个屏幕的间距计算我们可以使用getWidth()和getHeight()这两个方法获得。

  有关Padding和Margins的最好解释,教程之家推荐网友设计在一个Layout中放上多个Button,设置Button的 Padding和Margins同时设置Button父View的这两个属性来观察下按钮位置和按钮文字显示位置就可以简单区分不同了。

? ???8.Android最简单播放GIF动画方法是?

? ???很多网友觉得GIF动画竟然Android无法播放,其实GIF动画的原理就是逐帧播放,在Android中提供了AnimationDrawable类可以实现,有的网友写过GIF89A的解码方法在过去的J2ME平台移植到Android平台也能用,其实在Google Android上面开发目前2.2以后的固件支持的方法除了Flash Player外,更好的兼容方法就是使用万能的webkit浏览器了, 我们直接在工程中内嵌一个webView,当然了路径大家可以换成本地的,对于浏览器使用本地资源url为file://开头。 不过webView的资源消耗也不小,开个webView对象可能占用了至少8MB的RAM吧,保守估计,当然更多的要看插件和以及html的复杂程度所 决定的。

? ??9.Binder invocation to an incorrect interface错误

  有时候我们可能发现Android的版本不同,有些AIDL的调用可能会爆出ERROR/AndroidRuntime(28520): java.lang.SecurityException: Binder invocation to an incorrect interface这样的错误,表面上看是安全问题,但出现Binder invocation to an incorrect interface这样的错误,可能是由于API变动导致了AIDL的声明有出入,为了防止执行意外出现空指针,Android平台默认保护了进一步的执 行,从错误的提示来看就是不正确的接口异常,一般我们检查时可以查看源代码参考解决。

? ???10.Android上开发手机浏览器原理

  近期手机浏览器比较热门,如何开发一款Android上的手机浏览器呢? 今天就网友这一问题教程之家给大家一些思路。

  目前Google的Android平台上有几款比较热门的产品,比如说Opera Mini、Dolphin Browser、Firefox、UC以及手机QQ浏览器等,他们之间还是有一定的区别:

  1. Opera Mini使用的是自己的渲染引擎,页面经过重新排版处理,需要中间服务器干预好处就是压缩数据,省流量。

  2. Dolphin Browser在国外用的比较多,国内用户较少,这里不做过多介绍。

  3. Firefox在Android平台上是因为Google推出了NDK,使用了mozilla自己的渲染引擎,支持Javascript解析,效率直逼Webkit内核,不过整体对W3C的支持大于桌面平台的IE。

  4. UC是国内大家较熟知的产品前身为UCWEB,当初是为节省流量而设计类似Opera Mini,但对于JS脚本的支持无能为力,内部使用了自己的HTML解析器,当然现在的版本已经由服务器中转压缩数据,不过渲染效果不如webkit和 firefox的效果好。

  5. 手机QQ浏览器的实现类似UCWEB,比较山寨但UCWEB主要的功能都包含了在内。

  6. GO浏览器是3G门户推出的一款手机浏览器,和UC差不多,可以说是模仿。

  经过上面的分析来看,Android开发网将手机浏览器定为两大类三种情况。

  1. 高效内核、功能全面,比如Android自带的Chrome Lite,或iPhone上的Safari浏览器,Firefox、IE。

  2.?模拟浏 览器,Opera其实自己有解析引擎,但Opera Mini更像一个html解析器,并不能真正的算浏览器和桌面上差距很大,UC、QQ以及GO类似Opera其实他们没有自主的JavaScript的支 持,对W3C标准支持有限和PC上的浏览器设计原理有很大的不同。

  3. 增强型,基于Android的Webview或修改WebView设计的基于webkit的产品,这类浏览器开发轻松,更像重新定制系统的浏览器,可以加入很多辅助功能,或者说更好的UI。

  相关解决方案