Angel Beats 音乐集

Angel Beats 音乐集

说到音乐,身为一个死宅必须先推自己的信仰,也就是我最喜欢的动漫《Angel Beats》, 对我来说AB给我带来的影响是巨大的,他支撑我走过了大学这2年,我没有在最初遇上他,但是很荣幸在我即将进入迷茫的时候遇到了他,theme of sss 这首歌给我带来的深思无疑是非常巨大的,每次我循环这首钢琴曲的时候,心里总有种淡淡的悸动,人生不正是如此?人从懂事开始,不就已经开发反抗这世界所有对他的不公了吗?

OP & ED

AB的OP,ED无疑是成功的,少有的能够让我一直聆听的歌曲,每次OP的引入和结束ED的反思回忆,这就是人生

  1. My Soul,Your Beats!
  2. Brave Song

AB的音乐集

全部出自大魔王之手。

AB游戏钢琴曲

我的烘焙清单

烤箱

德尔玛 EO320(不限,功能讲,上下控温,30L+,做面包最好自带发酵功能)

工具

搅拌刮刀
打蛋盆(可以用比较深底的大容量碗替代,做蛋糕的时候鸡蛋打发体积会变得很大)
打蛋器 (单纯做蛋糕便宜一点的就可以了,如果想要做面包,需要和面的话,只能用厨师机 或者 面包机)
面粉筛
模具(推荐硅胶,PS:做戚风面包不适合用不沾模具)
锡纸(垫底和控制蛋糕?面包的火候)
硅胶垫(做烤鸡等烧烤类的东西,主要用户托盘的垫底材料,多次利用)
油纸 (单次利用,用于面包,海绵蛋糕)
托盘(一般烤箱有送,不过烤箱送的只能托盘只能烤面包或者已经有模具装好的蛋糕,要做 海绵蛋糕那种大的方形的蛋糕,就需要自己去买方形托盘了)

蛋糕 饼干 原料

黄油
低筋粉
泡打粉,吉士粉(不是必备)

面包原料

高筋粉
酵母

通用


奶粉
鸡蛋

经常去的网站和博客

优酷: 跟着君之学烘焙
美食杰

Android渠道打包

采用美团渠道打包形式

渠道包打包解决方案

美团渠道包解决方案

用于解决大量除了渠道码以外别的内容一摸一样的渠道包打包问题
原地址: http://tech.meituan.com/mt-apk-packaging.html

优点:

  1. 打包速度,目前一个release的包的打包大概是 90秒,目前我开发的项目有50+个包,预计一次打渠道包需要 80分钟
    ,采用美团方式, 2分钟
  2. 不再需要开发参与打渠道包,以后开发只需要打连接测试环境的包和连接正式环境的包就行了
  3. 打包方式利于qa进行测试验证

原理介绍:

META-INF目录
这个目录下面存放的是Apk包的签名,所有的文件都要通过这个签名的验证,当然有一种文件是可以越过这种验证,也就是在 META-INF目录下 一个空白没有内容只有名字的文件,那么我们只要把这个文件的名字改成我们的渠道码就可以了。
以后特殊设置我们照样是可以通过这个方法去累加。
Android中使用的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
private static String getChannelFromApk(Context context, String channelKey) {
//从apk包中获取
ApplicationInfo appinfo = context.getApplicationInfo();
String sourceDir = appinfo.sourceDir;
//默认放在meta-inf/里, 所以需要再拼接一下
String key = "META-INF/" + channelKey;
String ret = "";
ZipFile zipfile = null;
try {
zipfile = new ZipFile(sourceDir);
Enumeration<?> entries = zipfile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
String entryName = entry.getName();
if (entryName.startsWith(key)) {
ret = entryName;
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (zipfile != null) {
try {
zipfile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
String[] split = ret.split("_");
String channel = "";
if (split != null && split.length >= 2) {
channel = ret.substring(split[0].length() + 1);
}
return channel;
}

Handler之内存泄露

Handler之内存泄露

项目相关代码: https://github.com/pyystone/MyAndroidStudyNotes/tree/master/app/src/main/java/pyystone/androidstudynotes/memory/handler

分析

其实在我们开发的时候,图省事,我们会直接写上面那段注释的代码(比如我)

这样的结果其实IDE已经告诉我们了,那就是内存可能会发生泄露,但是往往我们不会去仔细思考和解决办法,也许会很草率得就改成了静态内部类的方式,所以查询了一些资料,在这里进行一些探讨

原因:

当Android应用程序启动时,framework会为该应用程序的主线程创建一个Looper对象。这个Looper对象包含一个简单的消息队列Message Queue,并且能够循环的处理队列中的消息。这些消息包括大多数应用程序framework事件,例如Activity生命周期方法调用、button点击等,这些消息都会被添加到消息队列中并被逐个处理。
另外,主线程的Looper对象会伴随该应用程序的整个生命周期。

然后,当主线程里,实例化一个Handler对象后,它就会自动与主线程Looper的消息队列关联起来。所有发送到消息队列的消息Message都会拥有一个对Handler的引用,所以当Looper来处理消息时,会据此回调[Handler#handleMessage(Message)]

非静态内部类 和 匿名类会持有外部类的的引用,在这里也就是 Activity.this, 当Activity 被finsh回收的时候,这个时候Handler还在引用他,这个时候就会导致Activity 没办法被GC回收。但是静态内部类是不会引用外部类的。

解决方案

  1. 主线程 + 回调

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    private Handler mHandler = new Handler(Looper.getMainLooper(), new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {
    if (msg.what == NOTICE_INFO_SYNC) {
    mSyncNoticeView.setVisibility(View.GONE);
    return true;
    }
    return false;
    }
    });
  2. 静态内部类

    1
    2
    3
    4
    5
    6
    static class MyHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
    // do something
    }
    }
  3. 弱引用 + 静态内部类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // WeakReference

    private Handler mHandler = new MyHandler(this);
    private static class MyHandler extends Handler{
    private final WeakReference<Activity> mActivity;
    public MyHandler(Activity activity) {
    mActivity = new WeakReference<Activity>(activity);
    }
    @Override
    public void handleMessage(Message msg) {
    System.out.println(msg);
    if(mActivity.get() == null) {
    return;
    }
    }
    }
  4. weakHandler
    git地址: https://github.com/badoo/android-weak-handler/blob/master/src/main/java/com/badoo/mobile/util/WeakHandler.java

  5. onDestory 的时候销毁掉

    1
    2
    3
    4
    @Override protected void onDestroy() {
    super.onDestroy();
    myHandler.removeCallbacksAndMessages(null);
    }

搭建指南

我是一个客户端开发工程师,老实说对前端开发一点也不熟,所以在搭建这个博客的时候参考了很多博客,具体就列出下面几个博客

安装全系列教程:http://wsgzao.github.io/post/hexo-guide/
主题提供者:https://github.com/MOxFIVE/hexo-theme-yelee/
建站全攻略:http://zipperary.com/categories/hexo/

博客学习日记

日记不是从最开始搭建博客开始记录的,所以前期的步骤是没有的

hexo d 功能使用

之前一直是提交public,但是这样非常麻烦,所以我这边配置了一下

git保存密码参考文档:http://www.cnblogs.com/dudu/archive/2011/07/06/git_save_username_password.html
这个站点要加https比如 githubhttps//github.com

然后在_config.yml里面添加一段代码

1
2
3
4
5
deploy:
type: git
message: "更新博客^.^"
repo:
- https://github.com/pyystone/pyystone.github.io.git,master

创建三级目录

—以上的部分categories: 这里
比如我的 code/android 就是

1
2
3
categories: 
- code
- android

增加百度,谷歌网站索引

参考地址 http://zipperary.com/2013/06/02/hexo-guide-5/

百度: http://zhanzhang.baidu.com/
谷歌: https://www.google.com/webmasters/tools/home?hl=zh-CN

通过 sitemap方式,可以安装sitemap插件
sitemap的路径是 域名/sitemap.xml
注意验证的html如果直接放到source里面会被转码添加一些内容,所以我们要在开头手动添加

1
2
layout: false
---

安装sitemap插件

git 运行 npm install hexo-generator-feed

然后编辑 hexo/_config.yml

1
2
plugins:
- hexo-generator-feed