- 博客(37)
- 资源 (9)
- 收藏
- 关注
转载 Java编程中“为了性能”需做的26件事
最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了。下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方。1.尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:
2014-12-22 17:52:34 794
原创 Cygwin的替代软件Gow
Gow是一个轻量级的Cygwin替代软件,它能做的事情是给Liunx软件提供一个Windows系统上的运行环境。Gow是Gnu On Windows的缩写,它跟传统的具有相同功能的Cygwin软件比起来的特点是体积小,Cygwin动辄能达到上百种,而它的体积不到10MB,但里面却集成了Liunx环境下130多种实用工具软件,其中包括:Shell 环境:bash, zsh压缩工具: gz
2014-12-22 00:14:02 2551
原创 Android中JNI调用过程简述
1.安装和下载cygwin,下载Android NDK;2.在ndk项目中JNI接口的设计;3.使用C/C++实现本地方法;4.JNI生成动态链接库.so文件;5.将动态链接库复制到java工程,在Java工程中调用,运行Java工程即可。
2014-12-22 00:11:45 17817 1
原创 JNI/NDK开发指南(2)
1.生成动态库.so,存放于手机的system/lib/中(APP如何将.so存入该目录,奇怪?????),Java层调用JNI的类会执行静态代码System.loadLibrary("***")将手机的system/lib目录中的动态库加载到VM。2..so动态库里,C组件开发者通过JNI_OnUnload()函数进行初始化。当然,老版的JNI是没有JNI_OnUnload()函数的
2014-12-22 00:08:18 2008
原创 自定义控件(3):view的绘制原理
自定义UI控件,需继承 View类或View的子类,并重载View类中的一些方法,不必都重载,但至少要重载onDraw( )。类别方法描述CreationConstructors onFinishInflate()当View和它的所有子对象从XML中导入之后,调用此方法
2014-12-22 00:06:10 3325
原创 自定义控件(2.3):SurfaceView和SurfaceHolder
本例需求及流程:Activity加载自定义的SurfaceView-> SurfaceView 构造器中:初始化画笔、传感器、SurfaceHolder并注册SurfaceHolder的监听(surfaceCreated和surfaceDestroyed)->创建surface即surfaceCreated时:注册传感器监听,初始化Ball(包括球的图片、位置、活动区域),启动线程并循环执行(
2014-12-22 00:04:27 1786 1
原创 自定义控件(2.2):SurfaceView和SurfaceHolder
本例需求及流程:Activity加载自定义的SurfaceView-> SurfaceView 构造器中启动线程A,循环改变SurfaceView的x,y坐标,当x,y坐标到某点时设渐显标志位picAlphaFlag为true -> Surface创建时即surfaceCreated中,启动线程B,循环根据SurfaceView的x,y(被线程A循环改变)实时绘制图的位置,并且picAlpha
2014-12-21 23:59:55 1129
原创 自定义控件(2.1):SurfaceView和SurfaceHolder
SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface。你可以控制这个Surface的格式和尺寸。Surfaceview控制这个Surface的绘制位置。 surface是纵深排序(Z-ordered)的,这表明它总在自己所在窗口的后面。surfaceview提供了一个可见区域,只有在这个可见区域内 的surface部分内容才可见,
2014-12-21 23:53:41 1011
原创 自定义控件(1):目的和简介
自定义控件有多种用途,例如:1.动态绘制控件宽、高;2.改变原生控件显示效果,如将slidingdrawer的content的一半显示出来;3.图形编程实现动画效果,如摇一摇手机后小球碰撞等等。
2014-12-21 23:52:42 808
原创 BroadcastReceiver那些事儿
BroadcastReceiver所对应的广播分两类:普通广播和有序广播。1.普通广播: 通过Context.sendBroadcast()方法来发送,所有的receivers接收器接收broadcast的顺序不确定。这种方式效率更高,但是BroadcastReceiver无法使用setResult系列,getResult系列及abort系列API。2.有序广播:
2014-12-21 19:07:24 938
原创 Java随笔
- 如果希望自定义类能与集合库正常协同工作,一定要在覆盖equals()方法同时,也覆盖hashcode()方法,使2个对象用equals()方法判断相等时,用hashcode()方法判断也相等(即返回相等的整数);- String和原始数据的封装类型都是不可变类;
2014-12-21 18:33:24 722
原创 各种List、Map、Set的比较
List:1.ArrayList:2.Vector:其方法都是同步的,除非需要同步的场合,否则基本被其同门师弟ArrayList替代;3.Stack:实现了先入后出;4.LinkedListMap:1.HashMap2.LinkedHashMap3.TreeMap4.Hashtable:其方法都是同步的,除非需要同步的场合,否则基本被其同门师弟Has
2014-12-21 11:49:32 1206
原创 Android数据库读写套件
1.SqliteDatBase类;2.SqliteOpenHelper类;3.ContentValues类,应用示例:ContentValues values = new ContentValues(); values.put(Images.Media.TITLE, fileName); values.put("_data", fileName); values.put(Imag
2014-12-20 22:49:20 694
原创 Android监听数据表(ContentObserver)
private ContentObserver mDownloadsObserver = new DownloadsChangeObserver(Downloads.CONTENT_URI);private class DownloadsChangeObserver extends ContentObserver { public DownloadsChangeObserver(
2014-12-20 21:13:25 621
原创 Android界面刷新
Android程序中可以使用的界面刷新方法有两种,分别是利用Invalidate和利用postInvalidate()来实现在线程中刷新界面。1.利用Handler刷新界面: Invalidate不能直接在子线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。实例化一个Handler对象,并重写handleMessage方
2014-12-20 20:50:52 1057
原创 Android工程中怎样使用隐藏API
使用android 隐藏api的前提:我们需要得到Android系统源码编译输出的一个文件out\\target\\common\\obj\\JAVA_LIBRARIES\\framework_intermediates\\classes.jar这个包里面包含所有的系统api, 隐藏的, 公开的添加 jar方法右键功能菜单->Properties->Java Build Path
2014-12-20 20:07:54 1267
原创 Android下载文件的进度条提示(网络通信部分示例)
URL url = newURL(http://somewhere.com/some/webhosted/file);HttpURLConnectionurlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.set
2014-12-20 19:44:32 1268
原创 Android获取手机位置(LocationManager)
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); List providers = lm.getProviders(true); /* Loop over the array backwards, and if you get an accurate location, the
2014-12-20 19:17:32 1388
原创 Android IPC 系列(2.3):AIDL
Aidl默认支持的类型包话java基本类型(int、long、boolean等)和(String、List、Map、CharSequence),如果要传递自定义的类型该如何实现呢?要传递自定义类型,首先要让自定义类型支持parcelable协议,实现步骤如下: 1>自定义类型必须实现Parcelable接口,并且实现Parcelable接口的public void writeToPar
2014-12-20 17:40:30 687
原创 activity切屏时的生命周期
1.不设置activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次;2.设置activity的android:configChanges=“orientation”时, 切屏会重新调用各个生命周期,切横屏、竖屏时都只会执行一次,但是竖屏最后多打印一条onConfigurationChanged();3.设置activ
2014-12-19 18:20:26 920
原创 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?
答:通过直接发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性。代码如下:Intent intent = new Intent();Intent.setAction(“android.intent.action.View”);Uri uriBrowsers = Uri.parse(“http://www.sina.com.cn”);Inte
2014-12-19 17:47:59 3394
原创 什么是ANR,如何避免?
答:ANR的定义:在android上,如果你的应用程序有一段时间响应不移灵敏,系统会向用户提示“应用程序无响应”(ANR:application Not Responding)对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。如何避免:首先来研究下为什么它会在android的应用程序里发生和如何最佳构建应用程序来避免ANR.android应用程序通常
2014-12-19 17:41:24 2154
原创 Android中的MVC
1) 视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对Android了解的比较的多了话,就一定可以想到在Android中也可以使用JavaScript+HTML等的方式作为View层,当然这里需要进行Java和JavaScript之间的通信,幸运的是,Android提供了它们之间非常方便的通信实现。2) 控制层(Controller):Andr
2014-12-19 13:19:23 1222 1
原创 Android常用方法
onWindowFocusChanged方法调用时机:1.创建时首次呈现在用户面前;2.当前Activity被其他Activity覆盖;3.当前Activity转到其他Activity或按Home键回到主屏,自身退居后台;4.用户退出当前Activity;
2014-12-19 10:32:40 992
转载 Android不同APP间共享数据:sharedUserId
Android-sharedUserId数据权限 Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户(Android系统是基于Linux)的.所以不同APK(用户)间互相访问数据默认是禁止的.但是它也提供了2种APK间共享数据的形式:1. Share Preference. / Content Provi
2014-12-17 20:32:06 8620 1
转载 Android之四种加载方式
Android之四种加载方式(http://marshal.easymorse.com/archives/2950 图片)在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载
2014-12-17 16:37:05 1031 1
原创 Android内存优化的几种代码处理
以下为Androi内存优化的几种代码处理,示例代码,仅供参考:•1. 生成Bitmap:InputStream is =this.getResources().openRawResource(R.drawable.pic1); BitmapFactory.Options options=newBitmapFactory.Options(); options.inJu
2014-12-17 11:56:30 1201
原创 Android内存问题的几种解决方案(二)
针对上一篇文 Android内存问题的集中解决方案(一) 中第6点“尽量不要使用setImageBitmap、setImageResource或BitmapFactory.decodeResource来设置大图”的详细说明如下:
2014-12-17 10:15:16 724
原创 Android内存问题的几种解决方案(一)
一般我们在遇到内存问题时,解决方案大体有如下几种:1.在内存引用上做些处理,常用的有软引用、强化引用、弱引用;2.在内存中加载图片时直接在内存中做处理,如:边界压缩;3.动态回收内存;4.优化Dalvik虚拟机的堆内存分配;5.自定义堆内存大小;6.尽量不要使用setImageBitmap、setImageResource或BitmapFactory.decodeResou
2014-12-17 10:09:28 952
原创 Java中a=a+b 与 a+=b区别
一般认为a=a+b的执行效率是低于a+=b的,因为它多进行了一步中间变量的操作,而且会多占用一个变量的空间。而Java编译器默认对其进行了优化,优化之后两条语句都当做 a+=b来执行了,所以实际上是没有任何却别的。
2014-12-15 22:14:06 2212 1
原创 线程相关
原子性:操作是不可分割的,就说这个操作是原子操作。比如a++; 这个操作实际是a = a + 1;是可分割的,所以他不是一个原子操作。非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作。java的concurrent包下提供了一些原子类,比如:AtomicInteger、AtomicLong、AtomicReference等。可见性:是指线程之
2014-12-15 20:38:54 720
原创 Java的方法绑定
1.程序绑定:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定2.静态绑定(前期绑定/编译期绑定):在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造
2014-12-15 19:32:48 5311 1
原创 Java内联函数
1.内联函数就是指函数在被调用的地方直接展开,编译器在调用时不用像一般函数那样,参数压栈,返回时参数出栈以及资源释放等,这样提高了程序执行速度。 2.Java语言中有一个关键字final来指明那个函数是内联的,例: public final void doSomething() { // to do something} 该方法在被调用时,会在调用处直接展开
2014-12-15 18:33:10 2545
原创 Class ref in pre-verified class resolved to unexpected implementation
报错场景:插件开发中,先在插件中引用某jar包后,将插件放入宿主运行,结果报此错; 原因分析:宿主与插件引用了相同的jar包,造成重复引用。去掉后问题解决!
2014-12-04 11:43:51 10045 2
SurfaceView示例2
2014-12-22
surfaceview动画示例
2014-12-21
AIDL和远程Service调用实现音乐播放器
2013-12-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人