android看不见main函数怎么办?程序异常了,可以不提示“xxx软件停止运行”吗?

今天遇到了这个问题,分享一下解决方案。

 

android没有main 函数,自然也就不存在main里面添加异常处理来实现全局异常捕获的方案。那android程序有全局异常补货的解决方案吗?

答案是有的:

那就是你得继承android工程里面的application,如:

public class ReaderApplication extends Application implements Thread.UncaughtExceptionHandler{......}

并实现线程异常补货接口:Thread.UncaughtExceptionHandler

 

这样你的程序,只要有没有处理的异常,都会在下面的uncaughtException函数中被捕获了。我的做法是重启应用程序。

	@Override
	public void uncaughtException(Thread thread, Throwable ex) {
		// TODO Auto-generated method stub
		//System.exit(0);
		
		Intent intent = getBaseContext().getPackageManager()  
	            .getLaunchIntentForPackage(getBaseContext().getPackageName());  
	    		

        
        PendingIntent restartIntent = PendingIntent.getActivity(    
                getApplicationContext(), 0, intent,    
                Intent.FLAG_ACTIVITY_NEW_TASK);                                                 
        //退出程序                                          
        AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);    
        mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000,    
                restartIntent); // 1秒钟后重启应用   
        
        System.exit(0);
        
	}


但不得不说的是,你得在application的oncreate函数中加上异常回调接口的注册:

Thread.setDefaultUncaughtExceptionHandler(this);

 

最后是,你得在AndroidManifest.xml中,将这句话修改为自己的Application:

 <application
        android:name="com.founder.reader.ReaderApplication"

 

 

 

好了,有了上面的全局异常处理,也就不用所谓的main函数才能实现的了。同时,程序也不会再提示“xxx软件停止运行”了。

 

 

最后:程序重启得用系统时钟来重启,否则程序都退出了,谁来执行重启任务:

AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, restartIntent); // 1秒钟后重启应用

 

 

最最后,不忘给自己的小网站打个广告:程序员必备软件:www.uhdesk.com

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北京橙溪科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值