让PHP更快的提供文件下载

一般来说, 我们可以通过直接让URL指向一个位于Document Root下面的文件, 来引导用户下载文件.

但是, 这样做, 就没办法做一些统计, 权限检查, 等等的工作. 于是, 很多时候, 我们采用让PHP来做转发, 为用户提供文件下载.

1
2
3
4
5
6
<?php
$file = "/tmp/dummy.tar.gz";
header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header("Content-Length: ". filesize($file));
readfile($file);

但是这个有一个问题, 就是如果文件是中文名的话, 有的用户可能下载后的文件名是乱码.

Read More

Window attributes属性详解

以下属性以Dialog为例来讲解:

<item name="windowBackground"> 窗体的背景 </item>
<item name="windowFrame">Dialog 是否有边框 </item>
<item name="windowNoTitle">窗体是否有标题</item>
<item name="windowFullscreen">false</item> 是否为全屏
<item name="windowOverscan">false</item> 是否要求窗体铺满整屏幕
<item name="windowIsFloating">false</item> 窗体是否浮在下层之上
<item name="windowContentOverlay">@null</item> 设置窗体内容背景
<item name="windowShowWallpaper">false</item> 是否显示壁纸
<item name="windowTitleStyle">@android :style/WindowTitle</item> 窗体的标题栏Style
<item name="windowTitleSize">25dip</item> 窗体文字大小

Read More

HandlerThread 与 多线程线程池的区别

我在想,handlerthread可以实现异步处理消息,还是批量的。多线程也是异步,处理批量消息。那么这两者的区别呢。

想了想,其实这两者的区别是很大的,多线程注重的并发,可以有多个线程,或者引入线程池进行管理。但是HandlerThread如果是new一个,那么它就是一个线程,一个线程处理多个消息。

还有一个区别,handlerthread的run方法里面是死循环,也就是除非手动调用quit方法线程是不会退出的,而多线程的线程有各自的处理方式,没有固定。

Read More