Android知识笔记

来源:互联网 发布:开源微信商城java源码 编辑:程序博客网 时间:2024/04/29 19:53

1、将activity中的“<category android:name="android.intent.category.LAUNCHER" />”去掉便可防止在安装完APK后生成桌面快捷方式

2、继承ActivityGroup后,可以使用

getLocalActivityManager() //获取LocalActivityManager

.startActivity(String id, Intent intent)  //用获取的LocalActivityManager打开intent指定的Activity/或其他组件,其中id最好是唯一的,这样有//助于根据该id进行Activity的复用等。

//返回该Activity的Window

 .getDecorView());//获取该Window的View

获取了View之后,想把这个View怎么用就是自己的事了。

3、编译NDK总能在Application.mk中看到的armeabi和armeabi-v7a的区别

现在的主流品牌的手机多采用armeabi-v7a,armeabi就是针对普通的或旧的arm cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm cpu。

所以,建议同时编译两种,加载时会根据手机cpu类型进行选择加载,可发挥armeabi-v7a设备的优势

4、在一个app里通过包名打开另一个app

// 通过包名获取要跳转的app,创建intent对象Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.liuxiang");// 这里如果intent为空,就说名没有安装要跳转的应用嘛if (intent != null) {// 这里跟Activity传递参数一样的嘛,不要担心怎么传递参数,还有接收参数也是跟Activity和Activity传参数一样intent.putExtra("name", "Liu xiang");intent.putExtra("birthday", "1983-7-13");startActivity(intent);} else {// 没有安装要跳转的app应用,提醒一下Toast.makeText(getApplicationContext(), "哟,赶紧下载安装这个APP吧", Toast.LENGTH_LONG).show();}


项目开发中容易出现的问题:

javah遇到的错误,

1、提示: 错误: 编码 GBK 的不可映射字符

解决方法:将对应的java文件编码改为ANSI,保存,OK!

2、提示: 错误: 无法确定Bitmap的签名

解决方法:找到对应版本的jar包,改后缀名为rar,之后解压,我解压到的路径是E:\xuan\path\
android,之后在-bootclasspath 后加入该路径( -bootclasspath <path>    从中加载引导类的路径)
E:\xuan\allWorkSpace\android3\PhotoProcessing>javah -bootclasspath E:\xuan\path\
android -classpath src -d jni com.example.photoprocessing.activity.PhotoProcessi
ngActivity

3、android解析xml文件失败
Caused by: android.view.InflateException: Binary XML file line #57: Error inflating class <unknown>
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.view.LayoutInflater.createView(LayoutInflater.java:518)
01-09 09:36:41.229: E/AndroidRuntime(1975): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView
Caused by: java.lang.reflect.InvocationTargetException
01-09 09:36:41.229: E/AndroidRuntime(1975): at java.lang.reflect.Constructor.constructNative(Native Method)
01-09 09:36:41.229: E/AndroidRuntime(1975): at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
Caused by: java.lang.StackOverflowError
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.content.res.AssetManager.getResourceValue(AssetManager.java:201)
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.content.res.Resources.getValue(Resources.java:888)
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.content.res.Resources.getDrawable(Resources.java:580)
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.content.res.Resources.loadDrawable(Resources.java:1694)
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.content.res.Resources.getDrawable(Resources.java:581)
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
01-09 09:36:41.229: E/AndroidRuntime(1975): at android.graphics.drawable.Drawable.createFromXml

程序竟然报了栈溢出错误,初看之下一头雾水,并且该代码在另一部手机小米1S下是没问题的,不过在其他机器都挂了,只要加载了该xml文件的Activity必挂,明显是该xml文件有问题了

查看错误,发现很多drawable的错误,逐个差看,发现定义了两个同名的图片资源A和B,A为xml文件,A文件中使用了B,将A和B改成名字不同的资源,问题解决

分析问题:  栈溢出错误容易出现在递归程序中,因为每次调用其他函数都会不断的将调用函数的资源压栈,如果调用次数过多则可能超出栈的容量限制,而遇到的这个BUG,则是该drawable自身包含自身,使得xml解析生成View时:自身不断创建自身,直到栈溢出异常发生。                 

   

0 0
原创粉丝点击