Android笔记2016-03-14
来源:互联网 发布:淘宝儿童秋装 编辑:程序博客网 时间:2024/06/05 05:04
一般画图是要将dip转化为px,防止现实不一致
- 如图的代码,DesityUtils.dip2px(getContext(),45);是将45dp的转为px,java代码中默认的单位是px。
- 在Android的布局文件中,往往使用dp作为控件的宽度和高度尺寸,但是在Java代码中,调用getWidth()方法获得的尺寸单位 却是像素px,这两个单位有明显的区别:dp和屏幕的密度有关,而px与屏幕密度无关,所以使用时经常会涉及到两 者之间的互相转化,代码示例如下:
public int dip2Px(Context context, float dp) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.5f);}public int px2Dip(Context context, float px) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (px / scale + 0.5f);}
使用intent的模式解决Back Activity退出所有的Activitys
当我们不断的intent到多个Activity时,如何Back返回到Main,方法如下:
采用FLAGACTIVITYCLEAR_TOP退出整个程序(多activity)
思路:通过Intent的Flags来控制堆栈去解决android中,每打开一个Activity,便会在栈中加入一个Activity,当该Activity被摧毁后,栈中便移除了它,并且栈中Activity是按照开打的先后顺序依次排排列的。
Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标 志 Intent.FLAGACTIVITYCLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity
对象初始化的一些问题
方式一:List list=new ArrayList()
方式二:ArrayList list=new ArrayList() 两种方式看似区别不大,但方式二比方式一效率高
- 1.5 直接调用成员 很多程序员在访问类成员时,习惯通过 getter 和 setter 方法 来访问,这是一个良好的习惯。但 getter、setter 方法在访问成员 时比直接访问成员效率低,如果只是简单访问可以直接访问成 员而不通过 setter、getter 方法[4]。
- 1.6 将成员变量缓存到本地 访问成员变量比访问本地变量要慢,因此可以将成员变量 缓存到本地来提高效率
对于Bitmap的回收问题
很多的时候,我们使用Bitmap不会出现多大的问题。但是当机器资源不够的情况下,很多应用都会报出 OutOfMemoryError,当然报出这样的异常往往是给Bitmap分配内存时内存不足引起的。即便是很小的一个图片,也会有出错,如何解决呢?
我的解决办法如下:
public static Bitmap createBitmap(int width, int height, Bitmap.Config config) { Bitmap bitmap = null; try { bitmap = Bitmap.createBitmap(width, height, config); } catch (OutOfMemoryError e) { while(bitmap == null) { System.gc(); System.runFinalization(); bitmap = createBitmap(width, height, config); } } }
经过最近不断的实验证明,当内存泄漏很大的时候,上述方法根本无法避免内存溢出。其实避免内存溢出还是要靠平时写代码的时候自己去注意。很多时候的溢出主要是因为Bitmap和Drawable资源没被释放造成的,尤其是当项目中图片资源很多的时候,这个问题尤为突出。
解决办法:当CreateBitmap之后,当这个Bitmap用完之后,那需要recycle这个资源。
还有当需要更换图片的背景资源的时候需要使用到Drawable,当需要更换那个Drawable时,原来的Drawable需要setCallback(null)来使Activity对原来的资源解除引用,从而使资源得到释放。Java的内存管理不像C++一般,但是也有它的灵活之处,只要仔细想想,还是可以将内存管理好的。
销毁的时候使用:
protected void onDestroy(){ BitmapDrawable b=(BitmapDrable)iv.getDrawable(); if(b!=null&&!b.getBitmap().isRecycled()){ b.getBitmap().recycle(); } super.onDestroy();}
对于多个Bitmap的显示问题,一般流程是:
对于System.gc和System.runFinalization()的区别
System.gc(); //告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的
System.runFinalization(); //强制调用已经失去引用的对象的finalize方法
对于Activity的销毁onDestroy的一些处理
@Overridepublic void onDestroy() { super.onDestroy(); // Always call the superclass // Stop method tracing that the activity started during onCreate() //停止追踪onCreate里的方法 android.os.Debug.stopMethodTracing();}
对于onPause()是不适合进行耗时的操作的,但是onStop()是可以的。因为onPause进行的时候,别的Activity开始进行onCreate。对于onDestory()也不适宜进行耗时操作。
对于Android的生命周期
onCreate() -> onStart() -> onResume()->onPause()-> onStop()-> onDestory()
如下图:
不要在非UI线程中初始化ViewStub,否则会返回null;
AndroidStudio的快捷键和使用问题
- 安装时,需要cp .android的文件到Library文件夹下;要不会导致安装不上;
- 对于Android模拟器的安装启动,要先安装加速器;
关于Fragment和Activity的xml嵌套
通过标签进行嵌套。如:
<fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fragment" android:name="com.example.google.MainActivityFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:layout="@layout/fragment_main" />
上面的demo是google提供的,tools:layout=”@layout/fragment_main”似乎和android:name=”com.example.google.MainActivityFragment”有点重复?其实tools:layout只是提供了预览功能的。主要的关联是通过name来关联类
关于绘画的切割模式种类
在使用方法如下:
Paint paint = new Paint(); paint.setFilterBitmap(false); paint.setStyle(Paint.Style.FILL); Bitmap bm=makeSrc(getWidth(), getHeight()); int sc = canvas.saveLayer(0,0, bm.getWidth(), bm.getHeight(), paint, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG); //底层图片的绘制 super.onDraw(canvas); //第二个图片 //画一个圆形截取底层的图片,而这个截取区域为圆形 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); Bitmap mSrcB =makeDst(getWidth(),getHeight()); canvas.drawBitmap(mSrcB, 0, 0, paint); paint.setXfermode(null);
模式图片:
//后面插入的会擦去后面的图片 new PorterDuffXfermode(PorterDuff.Mode.CLEAR), //直接显示后来的图片 new PorterDuffXfermode(PorterDuff.Mode.SRC), new PorterDuffXfermode(PorterDuff.Mode.DST), new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER), new PorterDuffXfermode(PorterDuff.Mode.DST_OVER), new PorterDuffXfermode(PorterDuff.Mode.SRC_IN), //截取一个形状为第二的图片的底图片 new PorterDuffXfermode(PorterDuff.Mode.DST_IN), new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT), new PorterDuffXfermode(PorterDuff.Mode.DST_OUT), new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP), new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP), //相交为空 new PorterDuffXfermode(PorterDuff.Mode.XOR), new PorterDuffXfermode(PorterDuff.Mode.DARKEN), new PorterDuffXfermode(PorterDuff.Mode.LIGHTEN), new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY), new PorterDuffXfermode(PorterDuff.Mode.SCREEN)
关于Activity的切换动画
overridePendingTransition(int enterAnim, int exitAnim),必须在Activity的startActivity和finish之后。
enterAnim:进入
exitAnim:离开
对于动画如果在TimerTask是无效的。需要用handler代替TimerTask
关于assets的文件问题
- 只能读取,不能写入
- 在webView中使用的路径是file:///android_asset/file_name.eof (End Over File,eof)
- 打开assets文件不能使用file:///android_asset/file_name.eof,需要使用getAssets().open(file_name.eof);
注意对于WebView加载外部内存卡的文件使用的路径是: “file:///”+Enviroment.getExternalStorageDirectory().getPath()+”/file_name.eof”
对于AsyckTack的并发使用
使用并发启动:
//thread_pool_executor 执行者[ɪɡˈzɛkjʊtə]new AsyncTack().executeOnExecutor(AsyncTack.THREAD_POOL_EXECUTOR,value);
对于FragmentPageAdapter的一个问题
如果使用了compile 'com.android.support:design:23.2.0'
的TableLayout,不显示Tab的tile的话是因为没有在FragmentAdapter中重写:
/** * 必须实现该方法,要不不能显示title * @param position * @return */ @Override public CharSequence getPageTitle(int position) { return tabTitles[position]; }
屏幕适配的种类
480x320
800x480
850x480
960x540
976x600
1080x672
1184x720
1205x800
1280x720
1280x800
1776x1080
1920x1080
2392x1440
默认使用1280x720的
对于EditText的键盘设置
通过属性imeOptions=“actionSearch”即可
- Android笔记2016-03-14
- Android 笔记 03
- Android学习笔记03
- android笔记14-Gallery
- Android笔记2016_04_01
- Android学习笔记14:Handler
- Android笔记---2016/1/28
- android笔记
- android笔记
- android笔记
- Android笔记
- Android笔记
- android笔记
- android 笔记
- android笔记
- Android笔记
- android笔记
- Android笔记
- QT学习之路————QT程序在开发板上旋转
- oracle基本总结
- sscanf函数
- 命名要能揭示意图
- Hadoop伪分布式运行wordcount小例子
- Android笔记2016-03-14
- Android LineView介绍
- apache学习笔记
- 圆拟合算法(距离之和最小)
- 回溯算法之N皇后问题
- java之redis篇(spring-data-redis整合)
- Android仿QQ ios dialog,仿QQ退出向上菜单
- SQL 面试题 一 (有关内连接、左、右连接、最大最小值)
- zabbix的安装