- 博客(27)
- 收藏
- 关注
原创 【Android一般进阶】startService和bindService混合使用分析
startService、bindService相信很多人都用过,但一般都只是用其中一种,很少有人会混起来使用。最近在开发项目时,遇到这样的需求:在activity中要得到service对象进而能调用对象的方法,但同时又不希望activity finish的时候service也被destory了。startService和bindService混合使用就派上用场了。首先我们先分析下st
2015-04-22 10:52:58 4009
原创 【Android 一般进阶】换个思路来监听home键
一监听返回键或者菜单键的情况比较多,但也不排除有监听home键的需求啊。监听返回键或者菜单键,可以通过重写activity的dispatchKeyEvent方法,判断event对象的KeyCode值来实现。虽然android提供了一个常量KeyEvent.KEYCODE_HOME,让我们以为可以监听home键,但其实是不行的。可以换个思路来做监听。我们知道,当点击了home键必然会调用
2015-03-24 17:11:47 1337 2
原创 【Android 一般进阶】固定JSONObject.toString()键值对顺序
org.json.JSONObject相信很多人都用过,例如:服务端返回给客户端的数据格式是JSONObject的,那我们通过对它进行解析,把它显示在界面上。有时候希望服务器跟客户端通信的JSONObjectt的键值对顺序是固定的。例如:客户端提交一个JSONObject格式的数据,里面有三个键值对,分别是"a":"a" "b":"b" "c":"c" 服务端原封不
2015-03-24 14:11:30 11621 4
原创 【Android 一般进阶】如何退出app
在网上看到很多关于退出APP的例子,无非就是把所有的Activity放到一个list里,要退出的时候,遍历list一个个finish,或者发广播,Activity接收要退出的广播,然后finish自己。有些还提到了使用android.os.Process.killProcess(android.os.Process.myPid()) 或 System.exit(0); 来退出,其实这是不行的
2015-01-20 16:44:19 1295
原创 【Android 很基础】PopupWindow和Dialog都不是阻塞型对话框
阻塞:使Activity进入了onPause方法,等到其执行某个动作完成,Activity再回到onResume方法。经测试,PopupWindow和Dialog显示时,Activity都不会进入onPause方法,而且显示以后,后续的任何代码包括对view操作的代码都可以执行,所以认为它们都不是阻塞型对话框。以上是个人看法,不知道我是否理解有误。
2015-01-20 10:48:28 1676
原创 【Android 非常基础】android官方不建议ScrollView嵌套ListView
当ScrollView在嵌套ListView时,一般会出现ListView无法完全显示的问题,解决此问题有以下方案:1.通过计算ListView每个item的高度,进行累加,设置ListView的LayoutParams.height,具体代码,百度就能找到好多。但这种方法有两个弊端:tem的根布局必须是LinearLayout的,如果是其他布局会报错,大概是在调用item.measu
2015-01-19 17:01:46 1749
原创 2016年3月android面试总结(2)
紧接着“2016年3月android面试总结(1)”,对其他4个公司的面试情况做一个总结:4.万*科技 号称很厉害的公司,在南山区软件产业基地那边。这次面试完全被虐了。 第一轮技术面试,有几个问题问的比较深,android回收优先级、java设计模式、多线程同步(单例)、消息环、anr、内存泄露。尤其是多线程同步(单例),以前只是了解过,根本没用过,只能
2016-03-25 16:29:13 867 1
原创 2016年3月android面试总结(1)
本人在深圳,差不多三年的android开发经验,最近想跳槽,面试了几家公司,在这里做一个总结吧。 这次跳槽的公司,希望能学到更多东西,另外还有薪资啦。1.怎么才算是一个能学到更多东西的地方呢? 对于自身来说,未来的工作内容涉及进程间通信、多线程同步互斥、jni、ndk、复杂控件定义(第三方jar无法满足或者不希望使用)、 app性能优化(anr、内存泄露、电
2016-03-25 15:04:31 797 2
原创 【Android 一般进阶】动态广播注册注销时机
个人建议动态广播在activity 的onResume()里注册,onPause里注销。大家都知道activity的生命周期方法基本上的成对,例如onCreate对应onDestory,onStart对应onStop,onResume对于onPause。对于动态广播来说,有注册必然得有注销,这也得成对出现。重复注册注销或者注册了忘了注销这都不好,后者会报Are you missing a
2015-06-03 11:13:48 8914 2
原创 【Android一般进阶】引用数据类型euqals()与==作用相同
在面试中,经常会被问到euqals()与==有什么区别,估计很多人都会回答:前者是比较值,后者是比较内存地址,其实这只对了一般吧,我感觉。首先==确实是比较对象的内存地址,这个毫无疑问,而euqals()呢?其实euqals()是object类中的一个方法,查看源码: public boolean equals(Object o) { return this ==
2015-05-11 16:14:29 945
原创 【Android 非常基础】contentResolver.update where条件不起作用
错误示范:Uri rowuri = Uri.parse("content://" + 某表URI+ msgId);ContentValues values = new ContentValues();String where = "name <> ?";values.put("age", "20");contentResolver.update(rowuri, values, wher
2015-03-26 16:30:09 3021 1
原创 【Android 非常基础】多通知 PendingIntent.getActivity参数使用
在做多通知的时候,一般都希望用户A发过来的消息是用一个通知显示,用户B发过来的消息用另外一个通知显示,互不干扰,那么就得活用PendingIntent.getActivity的参数。对PendingIntent.getActivity(Context context, int requestCode,Intent intent, int flags)参数进行下分析,重点是第二跟第四个:
2015-03-26 15:53:14 3863
原创 【Android 一般进阶】不建议在Service以及BroadcastReceive startActivity
在谷歌官方的API文档中,特别建议开发者不要在Service以及BroadcastReceive startActivity,这是为了防止在用户完全不知情的情况下,突然弹出一个页面中断了他的操作。在 http://developer.android.com/guide/practices/seamlessness.html#interrupt 中有如下解释:That is,
2015-03-26 14:27:48 1358
原创 【Android 非常基础】PopupWindow showAtLocation和showAsDropDown参数分析
PopupWindow 的这两个方法都是控制PopupWindow 出现的,具体分析如下:1.showAtLocation,例如:showAtLocation(findViewById(R.id.search_ib), Gravity.TOP | Gravity.RIGHT,10, 10);第一个参数:这个view是要能获取到window唯一标示的(也就是只要能获取到window 标示
2015-01-27 09:56:26 14672
原创 【Android 很基础】异常出现在show和dimiss dialog
在show或dimiss dilalog时会有可能会抛出以下异常:show时,1.android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@41ce6798 is not valid; is your activity running?2-.a
2015-01-27 09:37:04 2090
原创 【Android 一般进阶】singleInstance和singleTask导致startActivityForResult回调失败
先来了解下这两种启动模式:1.singleInstance,全局(即众多的任务栈)只有一个实例,它单独地存在于属于自己的任务栈中。2.singleTask,在任务栈中保存一个实例。它在启动的时候,会先在系统中查找属性值affinty等于它的属性值taskAffinity的任务栈是否存在,如果存在,则在这个任务启动,如果不在,则在新任务栈中启动。如果想要这种启动模式的activity在新的任
2015-01-24 10:39:57 5442
原创 【Android 一般进阶】ListView刷新指定item
ListView 的notifyDataSetChange(),相信很多人都用过,当item需要体现变化时,可通过该方法进行刷新。notifyDataSetChange()是刷新所有可视的item,如果只是想刷新某一个item,那么这显然不合适。因为当可视的item比较多,而且如果涉及到bitmap,全部统一都要刷新,这就会有点耗时,而且刷新bitmap时会出现闪屏,用户体验不好。刷新指定it
2015-01-23 16:19:46 2939
原创 【Android 非常基础】项目切换SVN路径,本地代码会怎么样呢?
android应用开发是一个版本迭代的过程,那就免不了切换SVN路径。以下场景跟SVN配置有关,不一定适用于所有人。1.低版本向高本版切换路径修改或新增的代码未在低版本提交的,直接切换即可,新增和修改的代码会自动携带过去(本地不会丢失),SVN会提示本地与服务器代码的异同,对比提交即可。除非SVN管理员在拉分支的时候,帮你把最近提交的代码也合过去了,否则,就要把代码手动添加到高版本路径
2015-01-23 14:50:31 1401
原创 【Android 非常基础】JAVA存储区域分析
JAVA存储区域主要分三块:1.stack栈,保存基本类型数据、对象的引用、数组引用,在ram(随机访问寄存器,即内存)里面共享。一般只有1-2MB,满了就会抛出java.lang.StackOverflowError异常。2.heap堆,保存new出来的对象以及数组,在ram(随机访问寄存器,即内存)里面。3.方法区(静态、常量、方法),所有对象数据共享区域,存储静态变量和普通方
2015-01-23 14:43:53 848
原创 【Android 一般进阶】ListView滑动到顶部smoothScrollToPosition
ListView一般用来展示数据,当不停的往下翻页,数据会不停的加载,数据也就会越来越多,listview也就越来越长。当用户想回到顶部的时候,难道还需要用户自己往上翻页吗?那也太落后了吧。一般会做一个按钮,跳转至顶部,有两种方式实现:1.使用setSelection(0),不过这样的跳转是没有动画的,瞬间到达顶部;2.使用smoothScrollToPosition(0),这样的跳转
2015-01-23 14:28:15 8397 2
原创 【Android 一般进阶】android自定义属性的使用
在自定义控件的时候,会使用到自定义属性。一般是在res/values/atts.xml文件中创建属性,例如 ,创建了一个属性名为textSize的,它的值是dimension类型的。在创建属性的时候,format除了可以使用dimension,还可以使用如下:reference 表示引用,参考某一资源IDstring 表示字符串color 表示颜色值dimens
2015-01-23 10:45:54 617
原创 【Android 非常基础】android开发小技巧
总结一下开发的小技巧,供各位参考。1.控件执行animation不起作用。在执行animation之前,要保证view是可见或占位的,否则动画不作用。(当时也不知道为什么会犯这种错误)2.ListView.getCount,Adapter.getCount以及getChildCount()方法Adapter.getCount()返回数据item数量,不包括头尾;ListVi
2015-01-22 15:24:05 706
原创 【Android 很进阶】android OOM理解以及相关方法分析
相信很多做应用开发的朋友都遇到过OOM,也会认为会出现OOM是因为虚拟机的heap满了,再往里面放东西就会溢出。个人认为这说法只对了一半。先了解以下概念:android一个应用可理解为一个进程(单应用多进程的暂时不讨论),一个进程的内存是虚拟机heap内存+native内存。这两块内存是不重新分配,也就是一旦分配完成,即使heap有空闲的内卡可用,native也不能够使用。所以我认
2015-01-22 11:20:27 991
原创 【Android 一般进阶】总结Parcelable和Serializable的区别
最近看了一些关于两者的比较,自己写一些总结,供各位参考。1.Serializable是为了保存对象的属性到本地文件、数据库、网络流以方便数据传输,而Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,我理解为Serializable比较适合用在数据持久化的场景下,而因为android不同版本P
2015-01-21 10:22:03 633
转载 【Android 一般进阶】android线程不安全
你的代码在同一个进程当中将会被多个线程执行,如果每次运行的结果跟单线程执行的结果一样,而且其他变量值也跟期望的一样,那么它就是线程安全,可以不用考虑同步问题。或者说,一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性。而android不是线程安全的,要考虑同步问题。
2015-01-20 15:10:28 633
原创 【Android 非常基础】ListView分页加载提交的参数分析
ListView数据一般会采用分页加载,以便提高用户体验。分页加载,那就涉及到滑动到底加载更多,逻辑是:监听ListView的滑动状态,判断若最后一条出现在屏幕中,则认为滑动到底,提交一个网络请求获取数据。在提交请求时,参数一般为起始下标fromIndex,终止下标toIndex。例如每次请求20条数据,加载第一页,提交的参数分别是fromIndex=0,toIndex=19,加载第二页,from
2015-01-20 13:51:13 1227
原创 【Android 非常基础】Apk安装失败no activity found handle intent或安装结束不提示完成
1.出现no activity found handle intent,一般是因为intent跳转失败。在进行以下语句跳转时,忽略了在apk路径前添加"file://",导致跳转失败,注意添加即可。Intent intent = new Intent(Intent.ACTION_VIEW);intent.setDataAndType(Uri.parse("file://"+"apk本地
2015-01-20 10:04:40 4287
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人