Android
kunluo
这个作者很懒,什么都没留下…
展开
-
NDK 使用 addr2line 定位 Fatal signal (SIGSEGV) 错误
使用NDK编写native code时候,真机常会出现crash的错误。然后logcat就是一片错误堆栈。[cpp] view plain copyI/DEBUG ( 2562): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 40123d5c I/DEBUG转载 2017-12-26 14:36:14 · 523 阅读 · 0 评论 -
HashMap,HashTable,LinkedHashMap,TreeMap
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap.Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问转载 2017-05-31 17:03:28 · 285 阅读 · 0 评论 -
Java动态代理的两种实现方法
jdk动态代理是由Java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的。总的来说,反射机制在生成类的过程中比较高效,而asm在生成类之后的相关执行过程中比较高效(可以通过将asm生成的类进行缓存,这样解决asm生成类过程低效问题)。还有一点必须注意:jdk动态代理的应用前提,必须是目标类基于统一的接口。如果没有上述前提,jdk动态代理不能应用。由此可以看出,jdk动态代理有转载 2017-04-23 00:26:32 · 652 阅读 · 0 评论 -
Android动态加载技术三个关键问题详解
动态加载技术(也叫插件化技术)在技术驱动型的公司中扮演着相当重要的角色,当项目越来越庞大的时候,需要通过插件化来减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块。动态加载是一项很复杂的技术,这里主要介绍动态加载技术中的三个基础性问题,至于完整的动态加载技术的实现请参考笔者发起的开源插件化框架DL(https://github.com/singwhatiwanna/转载 2017-04-23 00:04:03 · 318 阅读 · 0 评论 -
Java 类加载器
类加载器使得 Java 类可以被动态加载到 Java 虚拟机中并执行。一般来说,Java 应用的开发人员不需要直接同类加载器进行交互。Java 虚拟机默认的行为就已经足够满足大多数情况的需求了。不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很了解的话,就很容易花大量的时间去调试 ClassNotFoundException和 NoClassDefFoundError等异常。转载 2017-04-22 23:30:10 · 195 阅读 · 0 评论 -
Android事件分发
想必很多android开发者都遇到过手势冲突的情况,我们一般都是通过内部拦截和外部拦截法解决此类问题。要想搞明白原理就必须了解View的分发机制。在此之前我们先来了解一下以下三个非常重要的方法:dispatchTouchEvent()onInterceptTouchEvent() onTouchEvent() 图表示:1图表示:2转载 2017-04-22 19:42:28 · 125 阅读 · 0 评论 -
纠正对Fragment Transaction BackStack的误解
目前在开发APP时,Fragment已经被开发者广泛使用,但Fragment的BackStack却被很多开发者误解。所以这篇博客就讨论下Fragment的BackStack及一些相关的常用接口。首先需要明确的是,FragmentActivity的FragmentManager是处理Fragment Transaction的而不是处理Fragment。BackStack内部的一个Transactio转载 2017-04-22 12:22:37 · 242 阅读 · 0 评论 -
关于onActivityResult回调问题
1. Activity A使用startForResult启动Activity B,B什么都不做并返回A,A中的onActivityResult回调是否会执行?startActivity()方法,最终都是调用startActivityForResult()方法。默认的requestCode = -1, resultCode = 0,当你的requestCode != -1时,onActivit原创 2017-04-22 12:06:11 · 1025 阅读 · 0 评论 -
Android最佳性能实践(一)——合理管理内存
转载出处:http://blog.csdn.net/guolin_blog/article/details/42238633内存(RAM)对于任何一个软件开发环境都是种非常珍贵的资源,而对于移动操作系统来讲的话,则会显得更加珍贵,因为手机的硬件条件相对于PC毕竟是比较落后的。尽管Android系统的虚拟机拥有自动回收垃圾的机制,但这并不代表我们就可以忽视应该在什么时候分配和释放内存。转载 2017-05-03 16:03:45 · 197 阅读 · 0 评论 -
Android最佳性能实践(二)——分析内存的使用情况
转载出处:http://blog.csdn.net/guolin_blog/article/details/42238633由于Android是为移动设备开发的操作系统,我们在开发应用程序的时候应当始终把内存问题充分考虑在内。虽然Android系统拥有垃圾自动回收机制,但这并不意味着我们就可以完全忽略何时去分配或释放内存。即使我们全部按照上一篇文章中给出的编程建议来去编写程序,还是会很转载 2017-05-03 15:51:53 · 229 阅读 · 0 评论 -
Canvas的clip方法的使用
canvas 还提供裁剪的功能。 裁剪功能由Canvas提供的一系列的clip...方法 和quickReject方法来完成。 前面已经提到,真正提供可绘制区域的是Canvas内部的mutable bitmap。 Canvas更像是一个图层,我们只能在这上面的图层来绘制东西。1、首先介绍Region类Region,中文意思即区域的意思,它表示的是canvas图层上的某一块封转载 2017-04-11 20:46:00 · 1583 阅读 · 0 评论 -
Path在android的使用
Path是android中用来封装几何学路径的一个类,因为Path在图形绘制上占的比重还是相当大的。你可以用它来绘制各种样式的几何图形,做图表什么的都可以。一、画线段1.1 lineTo(float x, float y)先来看一段代码:@Override protected void onDraw(Canvas canvas) { supe转载 2017-04-11 20:34:06 · 487 阅读 · 0 评论 -
Android绘制圆形图片的方法总结
在需求开发中经常会遇到需要显示圆形图片的情况,比如我们经常见到的用户圆形头像。为了实现这个效果,我们需要重新定义View,通过重写onDraw方法来使得我们的View显示成圆形。要是实现这个功能主要有三种方法。使用Xfermode 相交模式 什么是相交模式?正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Pa转载 2017-03-24 10:38:47 · 289 阅读 · 0 评论 -
Android发送广播的三种方式
发送广播三种发送方法。sendBroadcast(),sendOrderedBroadcast()和sendStickyBroadcast()sendBroadcast()这个方法的广播是能够发送给所有广播接收者,按照注册的先后顺序,如果你这个时候设置了广播接收者的优先级,优先级如果恰好与注册顺序相同,则不会有任何问题,如果顺序不一样,会出leaked IntentReceiv转载 2017-06-01 19:04:07 · 16652 阅读 · 0 评论 -
Android service的生命周期
Android Service的生命周期Android Service的生命周期Managing the Lifecycle of a Service service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径:A started service 被开启的service通过其他组件调用 startService()被创建。转载 2017-06-01 19:13:22 · 267 阅读 · 0 评论 -
JVM、Dalvik以及ART的区别
转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/523549641. 前言Dalvik是Google公司自己设计用于Android平台的虚拟机。Dalvik经过优化,使其更适合Android平台。具体优点会在下面和JVM进行比较时说明。2014年6月谷歌I/O大会,Android L 改动幅度较大,Goog转载 2017-06-01 21:45:17 · 413 阅读 · 0 评论 -
ButterKnife onclick点击事件没反应
在添加依赖的时需要添加两个:compile 'com.jakewharton:butterknife:8.4.0'annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'123转载 2017-11-28 14:35:45 · 3879 阅读 · 0 评论 -
android 动画animation setRepeatCount不起作用
以 xml的形式定义了动画,但是没有起作用如下:[html] view plain copyxml version="1.0" encoding="utf-8"?> set xmlns:android="http://schemas.android.com/apk/res/android" android:dura转载 2017-11-28 15:08:35 · 2659 阅读 · 0 评论 -
String中intern的方法
internpublic String intern()返回字符串对象的规范化表示形式。一个初始时为空的字符串池,它由类 String 私有地维护。当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 Strin转载 2017-07-31 10:55:45 · 289 阅读 · 0 评论 -
android:installLocation简析
在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置.android:installLocation隶属于AndroidManifest.XML中的manifest节点.如下所示:xmlns:android="http://schemas.android.com/ap转载 2017-07-04 19:35:58 · 284 阅读 · 0 评论 -
Android 4.0以上设备的虚拟按键中menu键的显示问题
在 Android 4.0以后,google添加了虚拟导航键来替换实体键,同时按键由原来的四大天王改为back、home、recent三个。研究源码可以发现是否显示菜单键是在 Window初始化的布局中判断的,也即PhoneWindow的generateLayout函数。在android 5.1 以下该函数部分代码是这样实现的:[java] view plain c转载 2017-06-22 19:15:40 · 824 阅读 · 0 评论 -
commitAllowingStateLoss()
下边两个问题,是在开发中碰到的一些关于Fragment的偶发性的问题,今天时间比较多,就在网上搜了一些解决方式:1、关于Fragment(XXFragment) not attached to Activity 异常。出现该异常,是因为Fragment的还没有Attach到Activity时,调用了如getResource()等,需要上下文Content的函数。解决方法,就是等将调用的代码转载 2017-06-21 19:13:23 · 1928 阅读 · 0 评论 -
EventBus3.0使用详解
转至:http://blog.csdn.net/baidu_17508977/article/details/51612098前言:EventBus是最近接手的一个项目上在用的开源库,但是我这个EventBus菜鸟,之前还没用过,还没好好感受过它的好处,前几天刚刚看完源码,对EventBus有了一个大体的了解,看完源码之后,感觉此库真是好处多多啊,不吹不黑,不服转载 2017-06-20 19:56:57 · 243 阅读 · 0 评论 -
Uri详解之——Uri结构与代码提取
一、URI与Uri大家可能经常会看到在开发时,怎么有的时候是URI,有的时候是Uri,这是怎么回事?名称如此相像的两个类是有什么区别和联系?1.所属的包不同。URI位置在java.net.URI,显然是Java提供的一个类。而Uri位置在android.net.Uri,是由Android提供的一个类。所以初步可以判断,Uri是URI的“扩展”以适应Android系统的需转载 2017-06-28 18:12:45 · 647 阅读 · 0 评论 -
ListView中单独更新某个Item的方法
在一些listview的应用中,有时只是需要更新某一个指定的item。如聊天应用中,发送聊天结束的时候去更新发送的这条聊天的状态;论坛中,给某个帖子点赞成功之后去更新这个帖子的点赞数量。这个时候,我们不需要去调用Adapter的notifyDataSetChanged方法。可以写一个updateItem(int position)的方法去更新指定项。listview提供了getchilda转载 2017-06-01 23:53:25 · 2454 阅读 · 0 评论 -
Android - 封装Fragment不依赖于Activity
封装Fragment不依赖于ActivityFragment直接托管activity的intent会破坏Fragment的封装性。可以使用newInstance()的静态方法,完成fragment实例及bundle对象的创建,然后将argument放入bundle中,最后再附加给fragment.newInstance代码:转载 2017-06-01 23:47:38 · 730 阅读 · 0 评论 -
管理fragment
要管理fragment们,需使用FragmentManager,要获取它,需在activity中调用方法getFragmentManager()。你可以用FragmentManager来做以上事情:1.使用方法findFragmentById()或findFragmentByTag(),获取activity中已存在的fragment们。2.使用方法popBackStack(转载 2017-06-01 23:34:40 · 326 阅读 · 0 评论 -
Android Binder机制----实现自定义的系统服务
一.基于源码分析Binder机制: Binder机制是Android系统中实现跨进程通信(IPC)的一种重要机制。可以说,Binder机制在android系统中无处不在,所以,要研究android源码,学好Binder机制极其重要。 在学习Binder机制之前,我们先试着摸索一下系统中一些相关的涉及到Binder机制的代码。首先,先看看SystemServe转载 2017-06-01 23:05:51 · 774 阅读 · 0 评论 -
关于Android MediaCodec 的内容
MediaCodec是一个可以对音视频数据进行编码和解码的Android类,本文给出代码范例并解答常见问题。概述(可忽略)Mediacodec类在Android 4.1(API 16)开始出现,目的是为了能够直接访问设备自带的编译码器,所以它提供的接口比较原始(raw),虽然Java和C++都有MediaCodec这个类,但Java的更常见。在Android 4.3(API转载 2017-03-03 19:59:57 · 1001 阅读 · 0 评论 -
插件化开发—动态加载技术加载已安装和未安装的apk
首先引入一个概念,动态加载技术是什么?为什么要引入动态加载?它有什么好处呢?首先要明白这几个问题,我们先从应用程序入手,大家都知道在Android App中,一个应用程序dex文件的方法数最大不能超过65536个,否则,你的app将出异常了,那么如果越大的项目那肯定超过了,像美团、支付宝等都是使用动态加载技术,支付宝在去年的一个技术分享类会议上就推崇让应用程序插件化,而美团转载 2017-03-03 14:35:02 · 539 阅读 · 0 评论 -
Fragment生命周期
官方文档中有详细的文字说明,不过最好还是实践下,熟悉过程。http://developer.Android.com/guide/components/fragments.html一、Activity的生命周期图:二、Fragment生命周期图三、对比图四、测试代码:[java] view plain copy转载 2016-11-22 10:12:32 · 187 阅读 · 0 评论 -
RecyclerView的拖动和滑动 第二部分 :拖块,Grid以及自定义动画
原文:Drag and Swipe with RecyclerView Part Two: Handles, Grids, and Custom Animations 转载请注明出处:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0724/3219.html 在第一部分,我们介绍了ItemTouchHelp转载 2016-11-21 11:23:15 · 601 阅读 · 0 评论 -
RecyclerView的拖动和滑动 第一部分 :基本的ItemTouchHelper示例
在安卓中,有许多关于如何使用RecyclerView实现“drag & drop”与swipe-to-dismiss”的教程,库和例子。即使现在已经有了新的,更优的实现方式,大多数仍然是使用老旧的View.OnDragListener以及Roman Nurik在SwipeToDismiss中所使用的方法。很少有人使用新的api,反而要么经常依赖于GestureDetectors和onInter转载 2016-11-21 10:45:05 · 425 阅读 · 0 评论 -
在Android系统中使用系统自带的emoji表情
一,对emoji表情的理解 emoji表情是一种表情符号,在代码中它现在其实是一组遵循Unicode的编码,即每一个表情符号都对应了一个Unicode编码。更进一步说,emoji表情实际上是一组Unicode编码与一组表情描述之间的一一对应。注意,这里所说的不是表情图片,而是表情描述。那么图片的实现是由谁来负责的呢?图片是由各个系统或者软件针对统一的表情描述来各自实现的,他们都遵循转载 2016-12-01 21:07:29 · 3143 阅读 · 0 评论 -
Android 动态注册JNI函数
1.JNI函数注册方式在Android开发中,由于种种原因我们需要调用C/C++代码,在这个时候我们就需要使用jni了,jni在使用时要对定义的函数进行注册,这样Java才能通过native关键字定义的方法找到对应的C/C++函数注册函数的方法有两种: 静态注册和动态注册2.静态注册静态注册方式是比较常用的一种方式,理解和使用比较简单,但操作转载 2016-12-01 00:45:11 · 284 阅读 · 0 评论 -
sqlite3 语句总结
sqlite3 语句总结一、sqlite3长用于 轻量级的 数据存储,象单片机这一类,但是现在的sqlite3,已经很先进,不能小看二、sqlite3常用命令当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识:#sqlite3 test.db 查看数据库文件信息命令(注意命令前带字符'.'):s转载 2016-11-29 22:09:33 · 242 阅读 · 0 评论 -
快速自动更新Android Studio版本
快速自动更新Android Studio版本 在开发过程中,有些时候总是会报一些Android Studio vesion 版本低,要求升级之类的错误,然而大家又会嫌麻烦去网上下载,今天给大家介绍的一个小技巧是,在Android Studio里面直接就能升级的小方法,我们来看看怎样升级; 第一步: 打开Settings, 找到 下图 1所指的转载 2016-11-29 21:55:54 · 285 阅读 · 0 评论 -
Android ContentObserver类详解
ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于 数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。触发器分为表触发器、行触发器, 相应地ContentObserver也分为“表“ContentObserver、“行”ContentObser转载 2016-11-29 11:46:22 · 476 阅读 · 0 评论 -
Android中自定义属性的使用
做Android布局是件很享受的事,这得益于他良好的xml方式。使用xml可以快速有效的为软件定义界面。可是有时候我们总感觉官方定义的一些基本组件不够用,自定义组件就不可避免了。那么如何才能做到像官方提供的那些组件一样用xml来定义他的属性呢?现在我们就来讨论一下他的用法。一、在res/values文件下定义一个attrs.xml文件,代码如下:转载 2016-11-05 16:00:42 · 174 阅读 · 0 评论 -
Android中Bitmap, Drawable, Byte,ID之间的转化
1. Bitmap 转化为 byteByteArrayOutputStream out = new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);byte[] array= out.toByteArray();2. byte转化为bitmapBitmap bitma转载 2016-11-05 15:58:11 · 321 阅读 · 0 评论