如何在Android程序Force Closed后自动重启

在开发Android程序中,都会或多或少的遇到程序被Force Closed,那么如何让程序在Force Closed后自动重启呢?可以通过以下两部来简单实现:
1、在Activity的onCreate方法里初始化一个PendingIntent,你可以在intent中put一个针对crash的code,这样下次Activity启动后,就可以通过get code来判断是否是restart,以此来做一些事情。

Intent intent = getIntent();
int code = intent.getIntExtra(RESTART_INTENT_KEY, 0);

if (CRASHED_CODE == code)
{
    /** You can do something here. */   
    Log.d(TAG, "So sorry that the application crashed.");
}

intent.putExtra(RESTART_INTENT_KEY, CRASHED_CODE);
m_restartIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

2、为当前Activity的Thread设置一个UncaughtExceptionHandler,当某个Thread因为未捕获的异常而终止的时候会回调到它,这样只需要在uncaughtException(Thread thread, Throwable ex)方法的实现中,设置一个alarm来启动程序,如下边代码,程序将会在Crash 3秒后自动重启。

private UncaughtExceptionHandler m_handler = new UncaughtExceptionHandler()
{
    @Override
    public void uncaughtException(Thread thread, Throwable ex)
    {
        Log.d(TAG, "uncaught exception is catched!");
        AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 3000, m_restartIntent);
        System.exit(2);
    }
};
Thread.setDefaultUncaughtExceptionHandler(m_handler);

当然如果你觉得你的application在Force Closed后,自动重启并不是一个最佳的选择,也可以利用上述代码在程序Force Closed后保存一些程序Crash的Log,以便在以后的版本中修复Bug。

如何在android中为Http连接设置超时

最近在项目中因为与服务器打交道,所以经常需要进行Http请求操作,最开始写代码的时候并没有在意超时的问题,一开始还没什么问题,后来在Debug的时候发现有的线程一直结束不了,很占用资源。于是通过DDMS分析之后得出线程一直运行是因为线程中的Http请求没有设置超时时间,而刚好服务器也没有设置超时时间,于是线程就悲剧了。

Android中(更准确说是Java中)支持两种Timeout:connect timeout 和 socket timeout。

那么如何设置超时呢?

在通过HttpClient进行Http请求的时候,可以通过以下代码来设置Timeout:

HttpClient httpclient = new DefaultHttpClient();
HttpParams params = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(params,NetworkConstant.CONNECT_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, NetworkConstant.SOCKET_TIMEOUT);

在通过UrlConnection进行Http请求的时候,可以通过以下代码来设置Timeout:

URL url = new URL("http://www.google.com/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(NetworkConstant.CONNECT_TIMEOUT);
conn.setReadTimeout(NetworkConstant.SOCKET_TIMEOUT);

既然有两种Timeout,那自然就有两种TimeoutException:ConnectTimeoutExceptionSocketTimeoutException,如果想分别处理的话分别Catch就可以了,如果要统一处理只要Catch住它们的父类InterruptedIOException

WPF中的数据验证

最近在写与用户交互程序的时候,经常需要对用户输入的数据进行有效性的判断,当然你可以直接就禁止用户输入某些字符,但这样感觉用户体验上不好,所以一般的处理方法是给用户开放性的输入,对于错误的情况给予友好的提示。而要实现对数据的验证,

简单的方法可以写一堆if判断来处理需求中的逻辑,这样比较麻烦,而且代码看起来比较臃肿,最近在学习wpf,通过它的数据绑定就可以比较清晰而且简单的实现数据验证的功能。

大体需要三步:

1.需要一个与你控件进行数据绑定的类;

class DataSource
{
    private String _name;

    public String Name
    {
        get { return _name; }
        set { _name = value; }
    }
    private String _num;

    public String Number
    {
        get { return _num; }
        set { _num = value; }
    }
}

继续阅读

判断某个Intent是否可用(Android)

只要是了解过Android系统的人就一定知道Intent,Intent是一个表达你要干什么事情的工具,当你发出一个Intent后,系统内部能实现你想法的程序就会有响应,因此Intent让你的code更加modular and reusable。

开发Android程序的时候,经常会需要调用一些系统内部的程序,比如一个需要网络环境的App在启动后,首先要检查当前的网络环境是否正常,如果不正常,可以通过Intent的方式直接调用系统的网络设置界面,来引导用户处理问题。这种你能保证在每个机器里都有的程序,比如上边提到的Settings,你就不用担心找不到了。但是有时候,你可能会用到一些你不能确定所有用户设备内部都装有的App的时候,你就需要根据运行的实际环境来决定是否激活你App的某些功能,费了一大堆话,下边直接上代码:
继续阅读

Ubuntu如何调整分区大小(wubi安装方式)

前几天在公司安装Ubuntu系统,在选择分区的时候因为没什么经验,就大体选了个数,结果安完Ubuntu配完各种开发环境后,悲剧的分区就没有什么空间了,因为我是专门为Ubuntu分配了一个30G的分区装的(在windows下装的),怎么这么快就没有空间了呢,后来Google一番后,大概明白了怎么回事,Ubuntu在windows下的安装实际上是在windows下建立了一块虚拟的硬盘,然后将系统装在这个虚拟的硬盘上,这也解释了这种方式可以将Ubuntu随便安装在一个文件夹内。你在Ubuntu根目录/下可以发现一个host的文件夹,它其实就是将我安装Ubuntu的那个window分区挂载到了Ubuntu系统下,再一看它的空间,还有大量的空余,这岂不是与我当初专门为Ubuntu分了个区的最初想法所违背,重装吧,觉得自己费劲配起来的环境还得重配一遍,最好是能有一个方法可以在不破坏当前系统的情况下,将现有的Ubuntu分区扩大,带着这个想法我在Ubuntu的官方安装指导里找到了光明,用一个叫lvpm的工具就可以实现这个功能,过程还是比较简单的:
注意:lpvm目前不支持Wubi 10.04所安装的Ubuntu(patches welcome)。 继续阅读

access violation at address

好不容易找到一个不错的数据恢复软件(Drive Rescue)来恢复我之前误删的文件,因为文件比较多,扫描得30多分钟(18G的容量),等了30分钟后,还算不错,看到了我之前误删的文件,终于能够恢复了,可刚没恢复几个文件,软件就弹出了:access violation at address  in module “” read of address “” 错误,本来以为弹出错误关了就行了,大不了我不恢复那个文件了,可是错误窗口是关了,但是软件也因为错误而无法操作了,重新打开软件,上次扫描的纪录居然全没了,只能重新扫描,又是30多分钟,等扫描完了,可刚没恢复几个又弹出了那个问题,很是郁闷。于是上网搜索,找到了一位大师解决这个问题的全过程(节选了一段):

右击“我的电脑”。单击“属性”。

在“系统属性”中单击“高级”。

在“性能”中单击“设置”。

在“性能选项”中单击“数据执行保护”。

单击“添加”。选择要运行的程序。

OK。就这么简单。
抱着试一试的心理,在再等了30多分钟的扫描后,恢复文件再也没弹出“access violation at address“错误了。真是太感谢这位大师了。

原文链接:http://blog.csdn.net/jrq/archive/2006/06/14/797566.aspx 对这位大师解决这个问题过程感兴趣的,可以看看,很有不懈的精神,也很有文采。

无SATA驱动在sata硬盘上装XP

由于某人的特殊原因,本本被我自己弄坏了。所以需要重装,自己的安装盘使用不慎,被划比较严重,便向人借个XP安装盘。(因为截图太麻烦,所以本文所有图片都来自于互联网)
虽说盘内写的是带SATA驱动的,但是实际操作时,我就很费解了,发现全是IDE的驱动= =,但是系统分区已经被我削掉了。。。。老是提示我无法发现硬盘驱动器(如图1)(这必须的,没SATA硬盘驱动啊- -) ,所以无法安装XP。

图1
继续阅读

wordpress付费主题revolutiontheme开源

早前就听说著名的付费主题Revolutiontheme要开源,一直很期待,时不时的上去看看最新的消息,今天偶然上去一看已经有10款免费的Revolutiontheme发布了。

这个叫Revolution Code Blue ,很漂亮吧。我把所有十款主题下载都整理出来了,可以直接点击下载:

  • Revolution Code Blue
  • Revolution Code Gray
  • Revolution Code Red
  • Revolution Church
  • Revolution Lifestyle
  • Revolution Charred
  • Revolution Chrome
  • Revolution Black Canvas
  • Revolution Office
  • Revolution TV

    如果你还对Revolutiontheme开源的最新消息感兴趣,你可以通过跟随它的twitter,或者直接通过feedburn的地址:
    http://www.feedburner.com/fb/a/emailverifySubmit?feedId=2463788来订阅。
  • update:因为revolution官方取消了免费下载,所以所有下载链接都已失效,唯一留下的一款是Revolution Code Blue(可从WordPress官方下载),当然现
    在这款主题已经不更新了。