Linux下删除文件名带有空格的文件
1.使用单引号将文件名括起来进行操作;
rm '2018-08-07 17-29-48.png'
1.使用单引号将文件名括起来进行操作;
rm '2018-08-07 17-29-48.png'
Java中的序列化方式Serializable效率比较低,重要是以下原因:
所以Android重新设计了一种序列化的方式,结合Binder的方式,对上述三点进行了优化,一定程度上提高了序列化和返序列化的效率。
进程被杀的原因:
切换到后台内存不足时被杀
切换到后台厂商省电机制杀死
用户主动清理
保活方式:
1、 Activity提权:挂一个 1像素 Activity将进程优先级提高到前台进程
2、 Service提权: 启动一个前台服务,(API>18会有正在运行的通知栏)
3、 广播拉活。(监听 开机 等系统广播)
4、 Service拉活
5、 JobScheduler 定时任务拉活。(Android 高版本不行)
6、 双进程保活
7、 监听其他大厂广播 (如tx baidu 全家桶互相拉活)
Handler 和 AsyncTask (AsyncTask:异步任务,内部封装了Handler)
Handler线程间通信
作用:
线程之间的消息通信
流程:
主线程默认实现了Looper (调用loop.prepare方法 向sThreadLocal中set一个新的looper对象, looper构造方法中又创建了MsgQueue) 手动创建Handler ,调用 sendMessage 或者 post (runable) 发送Message 到 msgQueue ,如果没有Msg 这添加到表头,有数据则判断when时间 循环next 放到合适的 msg的next 后。Looper.loop不断轮训Msg,将msg取出 并分发到Handler 或者 post提交的 Runable 中处理,并重置Msg 状态位。回到主线程中 重写 Handler 的 handlerMessage 回调的msg 进行主线程绘制逻辑。
问题:
1、Handler 同步屏障机制:通过发送异步消息,在msg.next 中会优先处理异步消息,达到优先级的作用。
2、Looper.loop 为什么不会卡死:为了app不挂掉,就要保证主线程一直运行存在,使用死循环代码阻塞在msgQueue.next()中的nativePollOnce()方法里 ,主线程就会挂起休眠释放cpu,线程就不会退出。Looper死循环之前,在ActivityThread.main()中就会创建一个 Binder 线程(ApplicationThread),接收系统服务AMS发送来的事件。当系统有消息产生(其实系统每 16ms 会发送一个刷新 UI 消息唤醒)会通过epoll机制 向pipe管道写端写入数据 就会发送消息给 looper 接收到消息后处理事件,保证主线程的一直存活。只有在主线程中处理超时才会让app崩溃 也就是ANR。
3、Messaage复用:将使用完的Message清除附带的数据后, 添加到复用池中 ,当我们需要使用它时,直接在复用池中取出对象使用,而不需要重新new创建对象。复用池本质还是Message 为node 的单链表结构。所以推荐使用Message.obation获取 对象。
剩余链接
是 Model-View-ViewModel 的简写。MVVM与MVP的结构还是很相似的,就是将Presenter升级为ViewModel。在MVVM中,View层和Model层进行了双向绑定(即Data Binding),所以Model数据的更改会表现在View上,反之亦然。ViewModel就是用来根据具体情况处理View或Model的变化。
工作原理
在MVP中View并不直接使用Model,它们之间的通信是通过Presenter 来进行的,所有的交互都发生在Presenter内部,而在MVC中View直接从Model中读取数据而不是通过 Controller。
适合自己的才是最好的
原文链接
指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。
优点
缺点
使用场景
观察者模式的主要角色如下。
观察者模式的实现代码如下:
1 | public class ObserverPattern { |
Mark的JDBC的学习
[toc]
配置文件 jdbcinfo.properties
1 | oracle.driver=oracle.jdbc.driver.OracleDriver //数据库驱动 |
1 | graph TB |
原文地址:大自然的流风
下载:http://maven.apache.org/download.cgi
安装:解压下载好的maven的文件,解压到你想要的文件夹下。
配置:打开终端输入命令 sudo vim ~/.bash_profile (编辑环境变量配置文件)
1 | export MAVEN_HOME=maven文件夹路径 |
小技巧
复制文件夹路径方法:点击文件夹,然后使用组合快捷键:command + option + c 就会把路径复制到粘贴板了。
或者把文件夹拖放到控制台也可以显示出来
让mac文件夹显示文件夹和文件路径,执行命令:defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES
:wq
退出并保存当前文件,source .bash_profile
,按下Enter键使bash_profile生效。mvn -v
查看是否成功
1 | @Markxiansheng ~ % mvn -v |