您的位置:首页 > 其它

总结一下近来记录下来的知识点

2017-11-24 17:59 423 查看
发现每次写博客,总是献上一大堆废话,没办法,下笔也是需要慢慢思考的额。鄙人终究不是专业学者,毕竟自己也是只为学习只用!
这次记录的是我工作过程中记录下来的小知识点,学而不思则罔,死而不学则殆!
google官方网站Bitmap:处理bitmap,方方面面非常多,但是主要包含以下几个方面:高效加载大图,非ui线程处理bitmap,缓存bitmap,ui上处理bitmap,管理bitmap的内存。
试想一下:android是工作在有限的内存下,加载小分辨率的图片,它就会不清晰,影响体验,加载大分辨率的图片就非常耗费资源,有时滑动体验上很不好,影响效率。
所以呢,问题就产生了呀!我们可以尝试加载缩小版本的图片,避免超出内存限制,缩小版本而非小分辨率。
BitmapFactory.Options options = newBitmapFactory.Options();options.inJustDecodeBounds = false;BitmapFactory.decodeResource(getResources(), R.drawable.tt, options);int imageHeight = options.outHeight;int imageWidth = options.outWidth;String imageType = options.outMimeType;
我只想知道这段代码除了BitmapFactory.decodeResource(getResources(),R.drawable.tt,options);
获取该张图片的宽和高以及图片类型,那么options.inJustDecodeBounds=false;或者true有何区别呢?
inJustDecodeBounds表示只读取数据,不加载到内存中,false就表示加载到内存中去了。然而我们实际的应用是什么情况呢?
为了避免outOfMemory 我们需要作更多的工作:我们需要在真正解析图片之前检查它的尺寸。
1.       读取位图的尺寸与类型(Read Bitmap Dimensions and Type)
2.       加载一个按比例缩小的版本到内存中(Load a Scaled Down Version into Memory)
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
       int reqWidth, int reqHeight) [code]{
[/code]
   
final
BitmapFactory.Options options =
new
BitmapFactory.Options();
[/code]
   options.inJustDecodeBounds = 
true
;
[/code]
   BitmapFactory.decodeResource(res, resId, options);
 
   
// Calculate inSampleSize[/code]

<span lang="EN-US" style="" font-size:9.0pt;"="">options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

   options.inJustDecodeBounds = 
false
;
[/code]
   
return
BitmapFactory.decodeResource(res, resId, options);
[/code]
}
关键就是这个calculateInSampleSize。设置适合4000的。
多么不容易找到的一张图片!
这个采用异步任务实现,为了获取缩小版的图片,后台解析图片,执行完之后set bitmap.这个采用了弱引用,WeakReference,当然弱引用的使用是为了更好的回收Bitmap,
bitmap都懂得,容易占用内存导致oom,所以说这代码看似简单又不简单,由衷地佩服!
1.       为ImageView使用WeakReference确保了AsyncTask所引用的资源可以被垃圾回收器回收。2       开始异步加载位图,只需要创建一个新的任务并执行它即可:就这样传入一个resId,即可。

在基于启动ActivityIntent中创建一个返回栈,这个是什么意思呢?具体什么作用?

要启动一个activity,这里设置了TaskStackBuilder ,一般情况下是不需要的a,为什么在这里设置了这个?TaskStackBuilder taskStack = new TaskStackBuilder.create(this);taskStack.addParentStack(ResultActivity.class);taskStack.addNextIntent(resultIntent);//这里涉及到PendingIntent了stackBuilder.getPendingIntent( ); //一般情况下,是PendingIntent.getActivity( );一个特定的Activity不需要一个返回栈,所以你不需要在manifest中定义Activity的层次,以及你不需要调用 addParentStack())方法去构建一个返回栈。作为代替,你需要用manifest设置Activity任务选项,以及调用 getActivity())创建PendingIntent 很少情况下用到,不是很了解。先做记录!

关于通知的2,3事——

清除通知有几种方式:.setAutoCancle(),cancle(),cancleAll() 通知比较常见,应该都熟悉!常用setAutoCancle(),用户点击之后便消失了,比较方便!创建通知现在已经不用Notification 了,目前用的是NotificationCompat.Builder() 时代在发展。老的一些东西就被废弃了。通知展示一个进度条,平常的通知一般不用,执行下载任务是需要的,设置通知是通过mBuilder.setProgress(max , progress,false );最大值,百分比,布尔值,布尔值决定进度条是indeterminate (true) 还是 determinate (false)。当操作完成的时候,你可以选择或者让进度条继续展示,或者移除它。无论哪种情况下,记得更新notification的文字来显示操作完成。移除进度条,调用setProgress(0, 0, false))

关于Android Studio自带图标制作利器

Image Assert 真是觉得十分好用,可以试一试,兼顾设计。或者去一些在线图标制作网站, 例如:·        https://makeappicon.com/·        http://iconion.com/Vertor Assert

Vector是Android 5.0之后新增加的一项特性,目前已经可以兼容到Android 5.0之前的版本。但使用过程中依然还是可能产生一些兼容性的问题。BottomNavigationView这是一个非常好用的组件,实现底部切换,android 本身提供的就有,为什么大部分人都用Fragment来实现一遍呢?搞不明白!android:inputType="textPassword"最近对EditText 输入类型研究了下,真的挺多的,不过常用的就几个而已!其实没必要全部记住的!其实常用的也就text,textPassword.....这个后2行,限制单行输入,android:imeOptions="acttionGo"指出最后一个按键的动作,android:imeActionId="20" //自定义。指出最后一个按钮被按下的actionIdandroid:imeActionLable="sign in" 最后一个按键上的文字。以前没弄明白的Android 中UncaughtExceptionHandler 捕获异常比较方便,比如说空指针异常,开发工程中,没有用try{}catch包围,就很难定位到问题,有了这个工具就方便很多。继承UncaughtExceptionHandler  这个类,重写类中的UncaughtException方法。public interface UncaughtExceptionHandler {/*** Method invoked when the given thread terminates due to the* given uncaught exception.* <p>Any exception thrown by this method will be ignored by the* Java Virtual Machine.* @param t the thread* @param e the exception*/void uncaughtException(Thread t, Throwable e);}详情可参考博客 这篇博客写的不错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: