本文主要适用于非一二线互联网公司 Offer 的选择。希望以下一些简单的方法,可以辅助你去判断一家公司是否靠谱。
more >>程序媛、乐器狂、工匠、重度偏执者
前提:WebView在 Android 5.1 测试机上正常显示,在 Android 7.0 上无法显示,一直 loading 。(注:url 为 htts 协议)
考虑到验证码的 Webview 和 Listener 都是自己重写,可能漏掉了什么,果然在细细翻看官方源码的时候,发现了 WebViewClient 多复写了 onReceivedSslError 监听,初步判断是遇到证书问题。
解决:
如果 Parent 是 Child 的父类,那么 List<Parent>
和List<Child>
的关系是什么呢?对于 Java 来说,没有关系。
more >>
不想重复造轮子,但是查阅后发现网上大部分的博文缺少了考虑的情况。
要么粘贴的手机号无法格式化,要么删除时空格也占一个字符。
只能自己动手写了个全情况考虑的watcher
优化:
Intent本身就可以传递参数(Intent.putExtra(“key”, value))为何还要用Bundle呢?
Intent负责Activity之间的交互,内部是持有一个Bundle的。
putExtra()方法的源码
|
|
putExtras(Bundle bundle):会将Intent的内部Bundle替换成参数bundle。
AsyncTask
底层用到了线程池。AsyncTask封装了线程池和Handler,它主要是为了方便开发者在子线程中更新UI。
AsyncTask内的Handler是一个静态的Handler对象,为了能够将执行环境切换到主线程,这就要求Handler这个对象必须在主线程中创建。由于静态成员会在加载类的时候进行初始化,因此这就变相要求AsyncTask的类必须在主线程中加载,否则同一个进程中的AsyncTask都无法正常工作。
注意:从Android 3.0开始,默认情况下AsyncTask是串行执行的。但在Android 3.0之前是并行执行的。
IntentService
底层直接使用了线程,IntentService是一个服务,系统对其进行了封装使其可以更方便地执行后台任务,IntentService内部采用HandlerThread来执行任务,当任务执行完毕后IntentService会自动退出。
特殊的Service,它继承了Service并且它是抽象类。IntentService可用于执行后台耗时的任务,当任务执行后它会自动停止,同时由于IntentService是服务的原因,这导致他的优先级比单纯的线程要高很多,所以IntentService比较适合执行一些高优先级的后台任务。
HandlerThread
底层直接使用了线程,HandlerThread是一中消息循环的线程,在它的内部可以使用Handler。
HandlerThread继承了Thread,它是一种可以使用Handler的Thread,它的实现很简单,就在run方法中通过Looper.prepare()来创建消息队列,并通过Looper.loop()来开启消息循环,这样在实际的使用中就允许在HandlerThread中创建Handler。
程序中除了图片缓存(三级缓存),还有信息缓存。当用户无法联网时,app会默认显示缓存的数据。
SQLite
下载完数据文件后,把文件的相关信息如url,路经,下载时间,过期时间等存放到数据库,把url作为唯一的标识。下次下载的时候根据url先从数据库中查询,如果查询到当前时间并未过期,就根据路径读取本地文件,从而实现缓存的效果。
文件缓存
使用File.lastModified()方法得到文件的最后修改时间,与当前时间判断是否过期,从而实现缓存效果。数据格式为JSON。
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true