android的handler机制

在Android应用里,谷歌只允许在主线程即UI线程更新UI,在这个主线程里做一些耗时的操作会导致ANR,于是一些耗时间的操作,如网络请求,就需要搬到额外线程去执行,而耗时操作之后往往又需要返回主/UI线程去更新UI。针对这个场景Android提供了一些组件给开发者使用,包括Handler、HandlerThread和AsyncTask,后两者其实都是基于Handler的实现。

More...

Trampoline和尾递归

前言

nodeschool-Functional Javascript的第13题实现了一个repeat函数,其接收两个参数,函数operation和整数num,然后利用递归对operation调用num次。当num很大时,js会报一个Maximum call stack size exceeded的错误,说明递归太深,调用栈超出限制,第14题的任务就是用一个trampoline函数去解决递归爆栈问题。然而这个trampoline到底是啥exercise里毛说明都木有。

More...

HttpURLConnection和webview的协同使用

webview中使用post加载

在项目中遇到一个需求,需要在android的webview中对特定请求(其实就是第一次打开webview的时候)进行可自定义header的post请求,而原生webview提供的post API是这样的:

public void postUrl(String url, byte[] postData);

不可以自定义header,反观get API可以自定义header,真让人头大。

void loadUrl (String url, 
            Map<String, String> additionalHttpHeaders)

More...

scala中的延迟求值

在做scala99的P91 Knight’s tour时,需要递归搜索整个解题空间找到所有可能的解,如果只想要得到部分解,就要先算出全量解再作筛选,这样就要作多余的运算了。在其他编程语言一般利用控制流来实现,即利用if-else条件判断和return返回提前终止搜索过程,而在scala里更functional的写法是利用延迟求值,这里整理下相关的概念。

More...