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

发现每次写博客,总是献上一大堆废话,没办法,下笔也是需要慢慢思考的额。鄙人终究不是专业学者,毕竟自己也是只为学习只用!
这次记录的是我工作过程中记录下来的小知识点,学而不思则罔,死而不学则殆!



google官方网站Bitmap:处理bitmap,方方面面非常多,但是主要包含以下几个方面:高效加载大图,非ui线程处理bitmap,缓存bitmap,ui上处理bitmap,管理bitmap的内存。
试想一下:android是工作在有限的内存下,加载小分辨率的图片,它就会不清晰,影响体验,加载大分辨率的图片就非常耗费资源,有时滑动体验上很不好,影响效率。
所以呢,问题就产生了呀!我们可以尝试加载缩小版本的图片,避免超出内存限制,缩小版本而非小分辨率。
BitmapFactory.Options options = new BitmapFactory.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) {
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(res, resId, options);
 
    // Calculate inSampleSize

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

    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeResource(res, resId, options);
}

关键就是这个calculateInSampleSize。设置适合的。


多么不容易找到的一张图片!
这个采用异步任务实现,为了获取缩小版的图片,后台解析图片,执行完之后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

VectorAndroid 5.0之后新增加的一项特性,目前已经可以兼容到Android 5.0之前的版本。但使用过程中依然还是可能产生一些兼容性的问题。

BottomNavigationView

这是一个非常好用的组件,实现底部切换,android 本身提供的就有,为什么大部分人都用Fragment来实现一遍呢?搞不明白!

android:inputType="textPassword"

最近对EditText 输入类型研究了下,真的挺多的,不过常用的就几个而已!其实没必要全部记住的!其实常用的也就text,textPassword.....

这个后2行,限制单行输入,android:imeOptions="acttionGo"指出最后一个按键的动作,android:imeActionId="20" //自定义。指出最后一个按钮被按下的actionId

android: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);
    }

详情可参考博客 这篇博客写的不错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值