android问题,android问题总结

Android 5.0耗电快怎么办 Android 5.0常见使用问题解决办法

若使用的是vivo手机,Android系统是多个功能和服务的集合体,比如权限管理、蓝牙设置、电话服务、指纹与密码等常用功能有关的耗电会被计入Android系统,如果第三方软件使用到这些功能,电量也会被计入Android系统,所以我们看到Android系统程序耗电较高,实际和第三方软件的使用情况有关,您可以使用“一键加速”清理后台不必要的程序,适当调低屏幕亮度和音量;另外进入设置--电池,根据手机电量情况选择合适的省电模式,延长手机续航时间。

创新互联公司拥有一支富有激情的企业网站制作团队,在互联网网站建设行业深耕十年,专业且经验丰富。十年网站优化营销经验,我们已为上千中小企业提供了成都做网站、成都网站制作解决方案,按需网站制作,设计满意,售后服务无忧。所有客户皆提供一年免费网站维护!

Android开发常见异常与错误系列(一)

一、前言

这系列文章是自己在平时开发过程中遇到的问题。之前只是记在云笔记上面,现在整理一下,发出来共享。

ps:像那些什么没有注册Activity呀,权限呀等最基本的就不再赘述。

二、ADB连接异常

有时我们发现,即使自己从任务管理器里面把adb.exe给干掉了,但还是不行,这时,你就可以尝试以下操作:

[2014-07-30 17:09:11 - QtActivity] The connection to adb is down, and a severe error has occured.

[2014-07-30 17:09:11 - QtActivity] You must restart adb and Eclipse.

[2014-07-30 17:09:11 - QtActivity] Please ensure that adb is correctly located at ‘D:\InstallFile\AndroidDevelop\ADT\sdk\platform-tools\adb.exe’ and can be executed.

adb起动失败:

1,杀掉其它的adb.exe看,如果不行,

2,看sdk\tools路径下面有没有

hprof-conv.exe

如果有,则把它复制到sdk\platform_tools下

3,如果没有,刚看sdk\platform_tools下有没有

hprof-conv.exe

如果有,刚复制到tools下。

4,如果两者都没有,刚下一个

hprof-conv.exe

三、java.lang.IllegalStateException: Activity has been destroyed

这个异常在切换Fragment中比较容易出现,稍不注意就会出现如下异常:

FATAL EXCEPTION: main12-0909:20:14.689: E/AndroidRuntime(31223): java.lang.IllegalStateException: Activity has been destroyed12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1365)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)12-0909:20:14.689: E/AndroidRuntime(31223): at cn.com.topsky.community.tfd.DongTaiFragment.init(DongTaiFragment.java:209)12-0909:20:14.689: E/AndroidRuntime(31223): at cn.com.topsky.community.tfd.DongTaiFragment.onCreateView(DongTaiFragment.java:68)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Handler.handleCallback(Handler.java:605)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Handler.dispatchMessage(Handler.java:92)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Looper.loop(Looper.java:154)12-0909:20:14.689: E/AndroidRuntime(31223): at android.app.ActivityThread.main(ActivityThread.java:4624)12-0909:20:14.689: E/AndroidRuntime(31223): at java.lang.reflect.Method.invokeNative(Native Method)12-0909:20:14.689: E/AndroidRuntime(31223): at java.lang.reflect.Method.invoke(Method.java:511)12-0909:20:14.689: E/AndroidRuntime(31223): atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)12-0909:20:14.689: E/AndroidRuntime(31223): atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)12-0909:20:14.689: E/AndroidRuntime(31223): at dalvik.system.NativeStart.main(Native Method)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

经查,说这个是当前android-support-v4版本的一个bug,因为在当fragment进行到detached状态时,它会重置它的内部状态。

然而,它并没有重置mChildFragmentManager.这导致在Fragment重新attach时,它(fragment)没有重新attachm childFragmentManager,从而引发了上面的异常.

解决方案:

在每个调用getChildFragmentManager()的fragment中复写onDetach()方法:

@OverridepublicvoidonDetach() {super.onDetach();try{Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");childFragmentManager.setAccessible(true);childFragmentManager.set(this,null);}catch(NoSuchFieldException e) {thrownewRuntimeException(e);}catch(IllegalAccessException e) {thrownewRuntimeException(e);}}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

四、java.lang.IllegalArgumentException: Illegal character in query at index

这个异常,在我们拼接请求参数时,可能会碰到,原因是里面的特殊字符转换异常。解决办法如下:

url转换问题

String url = baseUrl + “?” + “name=” + name + “age=” + age;

url = url.replaceAll(“”, “%26”);

url = url.replaceAll(” “, “%20”);

解释如下:

特殊符号替换符号

?%3F

%26

|%124

=%3D

#%23

/%2F

+%2B

%%25

空格%20

五、eclipse连接小米2S调试程序的问题

虽然快2年没用过eclipse了,但这个问题还是贴出来,也许正好有正在用eclipse的同学遇到了此问题:

小米Mi2S连接到eclipse上无法识别。即使开启了调试模式,也无法识别.终于找到了一个可用的方法。

方法

用数据线连接手机和电脑。

打开手机拨号界面。

在拨号界面按 # #717717# # 自动就开启了。

在通知栏会出现一个 Diag USB port enable。

当然,应该是需要ROOT权限的。

这时候你的PC机会弹出安装设备驱动。

如果不成功,多插拔几次试试。

ok!安装完就搞定了!这时候打开eclipse就会在Driver里面看到你的手机了。

注意事项

在PC机上安装新硬件向导时候可能会遭遇到缺少dll文件,比如我就遇到缺少了WinUSBCoInstaller2.dll,这个问题。这时候就要去网上找找喽。这个东西分x64 和 x86的,注意不要搞错了!

如果先打开eclipse,再安装的话,可能导致eclipse挂掉,不明原因,可能是我机器配置不行。两次均有这种状况。所以建议先安装后再开eclipse。

android开发中经常碰到哪些问题

【错误信息】

[2011-01-19 16:39:10 - ApiDemos] WARNING: Application does not specify an API level requirement!

[2011-01-19 16:39:10 - ApiDemos] Device API version is 8 (Android 2.2)

原因:

不影响正常运行。在AndroidManifest.xml文件中没有加API的版本号,在manifest

/manifest 之间加uses-sdk

android:minSdkVersion="3"/uses-sdk

[2011-01-19 16:55:04 - ApiDemos] Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE

[2011-01-19 16:55:04 - ApiDemos] Please check logcat output for more details.

[2011-01-19 16:55:05 - ApiDemos] Launch canceled!

该设备没有足够的存储空间来安装应用程序,

【错误信息】

[2011-02-18 11:46:53] Failed to push selection: Is a directory

原因:

原先目录已经有pkg_3.apk的文件夹,再copy一个pkg_3.apk安装文件时出现问题,解决办法,先删除掉pkg_3.apk的文件夹

[2011-03-04 09:25:12 - ActivityMain]: Dx

UNEXPECTED TOP-LEVEL EXCEPTION:

java.lang.IllegalArgumentException: already added: Lorg1/apache/commons/codec/net/RFC1522Codec;

[2011-03-04 09:25:12 - ActivityMain]: Dx at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)

[2011-03-04 09:25:12 - ActivityMain]: Dx at com.android.dx.dex.file.DexFile.add(DexFile.java:143)

.....

[2011-03-04 09:25:12 - ActivityMain]: Dx1 error; aborting

[2011-03-04 09:25:12 - ActivityMain] Conversion to Dalvik format failed with error 1

原因:

【错误信息】

启动Eclipse时出现:

this android sdk requires android developer toolkit version 10.0.0 or above.

current version is 8.0.1.v201012062107-82219.

please update adt to the latest version

原因:

Eclipse的android开发插件版本过低,应该下载ADT-10.0.0,并且

1. 启动 Eclipse, 然后进入 Help Install New Software.

2. 在 Available Software 对话框里,点击 Add....

【错误信息】

[2011-03-09 15:21:34 - Info] Failed to install Info.apk on device '?': Unable to open sync connection!

[2011-03-09 15:21:34 - Info] java.io.IOException: Unable to open sync connection!

[2011-03-09 15:21:34 - Info] Launch canceled!

原因:

关闭模拟器和eclipse,执行adb kill-server命令,然后重试一下

【错误信息】

调用Webservice时出现

java.net.SocketException: Permission denied (maybe missing INTERNET permission)

原因:

需要访问到网络,所以,在AndroidManifest.xml中,需要进行如下配置:

uses-permission android:name="android.permission.INTERNET" /

【错误信息】

org.xmlpull.v1.XmlPullParserException: expected: START_TAG

{}Envelope (position:START_TAG

{}wsdl:definitions

targetNamespace=''@2:603 injava.io.InputStreamReader@44a3a7b0)

原因有可能是以下2个之一:

1)Webservice服务器的Soap版本为1.0,所以客户端指定

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

VER11改为VER10

2)String serviceUrl = "";

Url指的是你的webservice的地址.一般都是以***.wsdl或者***.?wsdl结束的...但是.需要注意的是..要去掉后面的.wsdl或者.?wsdl

【错误信息】

在新的线程中 public class HttpThread extends Thread {...}

增加一个弹出窗体:

[java] view

plaincopy

new AlertDialog.Builder(this).setTitle("数据加载失败").setMessage("请检查网络连接情况") .setPositiveButton("OK", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialoginterface, int i) { } }).show();

原因及解决办法:

//不能在线程中操作UI界面

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

修改后:

[java] view

plaincopy

new AlertDialog.Builder(com.nantsing.infoquery.chuanbo_detail.this).setTitle("数据加载失败").setMessage("请检查网络连接情况") .setPositiveButton("OK", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialoginterface, int i) { }

【错误信息】

The constructor AlertDialog.Builder(chuanbo_detail.HttpThread) is undefined

原因及解决办法:

在UI主线程之外是无法对UI组件进行控制的。因为你必须在新线程任务完成之后利用各种方法先UI主线程发送消息通知任务完成从而来显示各种提示消息。

线程间通信方法有多种,常用的是用handler来传递消息。

如下:

线程中构造消息:

[java] view

plaincopy

//

构造消息Message message = handle.obtainMessage();Bundle b = new Bundle();

b.putString("tag", "1");message.setData(b);handle.sendMessage(message);

另外自定义消息:

[c-sharp] view

plaincopy

/** * 捕获消息队列 fubin.pan 2011-04-02 */Handler handler = new Handler() {public void handleMessage(Message m) {if (!m.getData().getString("tag").equals("1")){ ...}else{new AlertDialog.Builder(chuanbo_detail.this).setTitle("数据加载失败").setMessage("请检查网络连接情况!") .setPositiveButton("OK", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialoginterface, int i) { } }).show();}}};

【错误信息】

android低版本工程(如1.5)放到高版本环境中(如2.2)可能会上述错误,解决方法如下:

1。 如果不修改android sdk版本,则使用project clean 命令作用于某工程即可。

(该处理方式只是在高版本中兼容了低版本工程,未真正意义上的升级)

2。 如果修改android sdk版本,则需要以下几个步骤:

1)修改SDK

选择工程,build path -- configure build path --- library 删除引用的低版本SDK,

然后add External JARs,选择高版本SDK,OK,保存

2)修改classpath文件

该文件可能存在该项: classpathentry kind="lib" path ="你所指定的高版本的地址"

把她修改成classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK" /

3) 修改AndroidManifest.xml

在AndroidManifest.xml文件中,application标签后添加uses-sdk android:minSdkVersion="3"/uses-sdk

4) 修改default.properties(很重要)

该文件最后一行(前面没用#的)target=android-3 该成target=android-8,保存。

再看看你的工程和新建的android 2.2的工程结构就一样了。

Android焦点问题

Android焦点分发主要涉及的方法就是

findFocus:View都有,发现焦点

requestFocus:View都有,请求获取焦点

requestChildFocus:只有ViewGroup有

focusSearch:View都有,焦点查询

这几个方法下面将分别介绍一下这几个方法。

1、焦点的获取,默认进入页面

系统自动请求焦点也是从最顶层的容器控件开始向内请求的,我们进入一个界面系统会自动请求焦点,寻找焦点,最后使用一个控件获得焦点。

2、焦点的切换

切换焦点的时候,也是要从最顶层的父容器寻找到焦点(findFocus),然后从获得到焦点的控件开始从内向外调用focusSearch寻找下一个焦点控件。

总结:Android的焦点分发跟事件分发类似,有一个从内向外,从外向内的过程,焦点分发中,寻找当前的焦点控件(findFocus)和焦点的请求(requestChildFocus)都是从外向内的,就是从顶层的父容向内层的子容器寻找和请求,但是搜寻下一个焦点(focusSearch)是从当前焦点控件开始的,就是从内向外寻找,到这里我们知道了Android焦点分发的一个基本流程。

参考 Android TV 按键焦点事件分发流程详解


新闻标题:android问题,android问题总结
浏览路径:http://scyanting.com/article/dscddjp.html