1.ImageView的图片自适应拉伸,但出现上下或左右空白时,添加android:adjustViewBounds="true"
2.GestureDetector,旨在将传递给View/ViewGroup的OnTouchEvent处理的触摸事件,有效地转换为scroll、fling等具有行为意义的二次事件,并在起响应方法中实现。只需要在View/ViewGroup的OnTouchEvent方法中,直接return gestureDetector.OnTouchEvent(ev),将ev消息传递给gestureDectector间接处理。
3. 系统布局相关文件,存放路径:..\androidsdk\platforms\android-7\data\res\layout
4.Service在任何Thread启动(startService(intent)),它都同时有一个实例(同一个ID),当其stopService方法销毁后,再次启动,才会有一个新的实例产生。Service符合单例模式。Service缺省和申明它的应用程序使用同一个进程并且运行在主线程中,因此如果你的Service比较耗时的话,那么这个Service会影响到应用的用户响应性能。为避免这种现象,你应用在Service中创建新线程。
5.多线程开发过程中,经常会用到ThreadPool的概念。Android的API中一般使用Excutor或ExcutorService接口的实现类快速实现ThreadPool的管理控制,Excutors内部方法可以创建Excutor或ExcutorService的实现对象。另外,常用的异步任务类AsyncTask也是由Excutor去控制任务池(也是ThreadPool),它使用的是SerialExcutor。
6.Thread可执行Runnable和Callable,两者的区别在于Runnable无异步返回结果,而Callable有异步返回结果Future<T>,且需要Thread.submit方法执行。
7.横竖屏的切换可以利用setRequestOrientation方法,但每次切换屏会默认销毁原来的Activity,Activity会调用两次onCreate。如果Activity内有Fragment,会导致Fragment完整调用两次onCreateView,会可能导致某种异常。避免的方法是,在AndroidManifest.xml中相应的activity添加android:configChanges="keyboardHidden|orientation",这样Activity在切换屏幕时就不会销毁。然而,其中的fragment仍然有2次调用onCreateView,解决方法是用getActivity().getRequestedOrientation()判断屏幕方向然后return null。
8.编写layout xml文件时,如果发现所写标签属性与其预想不符(例如LinearLayout的divider),可检查Androidmanifest.xml中<application>标签下的theme属性是否使用了系统指定的风格,这将影响很多默认的属性表现。
9.WebService实际上是基于soap协议的http post操作,android用ksoap2包有webservice的相关操作类。
10.Fragment.getActivity()在父Activity被系统回收的情况下回返回null,属于系统级BUG,一般需要额外处理。
11.同步代码块,可使用synchronized(object)或Lock对象的方式进行
12.View的Canvas对象,总是在measure之后被确定大小,如果利用其canvas绘制任何内容,都不能超出该canvas范围,否则绘制无效
13.用Canvas绘制NinePathDrawable的时候,如果发现绘制出来的.9png透明的地方变黑,那么很可能是和绘制时调用的Paint对象的PorterDuff.Mode有关
14.如果希望用View.setEnabled()或XML中android:enabled属性设置View在Enabled不同情况下的交互样式,那么应该可以用Button而不是ImageView等