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

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

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

答案是有的:

那就是你得继承androidproject里面的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

时间: 2024-10-12 19:32:27

android看不见main函数怎么办?程序异常了,能够不提示“xxx软件停止执行”吗?的相关文章

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

今天遇到了这个问题,分享一下解决方案. android没有main 函数,自然也就不存在main里面添加异常处理来实现全局异常捕获的方案.那android程序有全局异常补货的解决方案吗? 答案是有的: 那就是你得继承android工程里面的application,如: public class ReaderApplication extends Application implements Thread.UncaughtExceptionHandler{......} 并实现线程异常补货接口:T

【转载】MFC的Main函数跑哪去了

原文:http://blog.csdn.net/weiwenhp/article/details/8455471 习惯的思维 用习惯了C的人要看一个程序时首先会想到找到那个main函数在哪,然后再顺着往下看.因为main函数作为程序的入口点,整个程序都是从那开始执行的.当在C++中SDK(win32 API project)开发时也继承沿用C的思维,是有个main函数,不过现在的main函数改名字了,叫WinMain,当然有时还有变体,比如叫_tWinMain,反正名字中总会带个Main,让我们

Knowledge Point 20180303 详解main函数

学习Java的朋友想来都是从HelloWorld学起的,那么想来都对main函数不陌生了,但是main函数究竟是怎么回事呢?main函数中的参数是做什么的呢?main函数为什么能作为程序的入口呢?可不可以存在多个main函数呢?下面我们就来对main函数进行一些深入的了解. 1.Java中的main()方法详解 在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是mai

android.intent.action.MAIN 与 android.intent.category.LAUNCHER 的验证理解

第一种情况:有MAIN,无LAUNCHER,程序列表中无图标 原因:android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里 第二种情况:无MAIN,有LAUNCHER,程序列表中无图标 原因:android.intent.action.MAIN决定应用程序最先启动的Activity,如果没有Main,则不知启动哪个Activity,故也不会有图标出现 console里面两种情况显示一样: 下面看一个应用程序可以有两个Activity的情况 点击(此处)折

对于Java中main函数为虚函数以及多态的一点理解

Question: 1.在Java中,由于main函数的定义为: public static void main(String[] args):那么要想在main函数中调用其余的函数的话,就必须将定义为static.另外,调用其他类编写的成员函数时,却不需要该成员函数为静态的,这是为什么? 分析: 静态方法是属于某一个类所有,而非静态方法是属于某类的对象所有.也就是说,要想调用非静态方法,必须先调用new来得到一个类的对象,系统为其分配内存,然后才能通过该对象访问相应的非静态成员函数.而静态方法

第七章之main函数和启动例程

main函数和启动例程 为什么汇编程序的入口是_start,而C程序的入口是main函数呢?本节就来解释这个问题.在讲例 18.1 "最简单的汇编程序"时,我们的汇编和链接步骤是: $ as hello.s -o hello.o$ ld hello.o -o hello以前我们常用gcc main.c -o main命令编译一个程序,其实也可以分三步做,第一步生成汇编代码,第二步生成目标文件,第三步生成可执行文件: $ gcc -S main.c$ gcc -c main.s$ gcc

main函数的汇编代码

本文主要对main函数编译后生成的汇编码进行观察,为了简单起见,main函数的内容为空.实验方法如下:首先在不同环境下编译源代码,收集生成的可执行文件:随后将可执行文件使用IDA Pro(版本为5.5,这里赞一下强大的IDA!)进行反汇编:最后观察main函数的汇编码(所有汇编码格式都是Intel风格的),进行分析与比较.本文重点在于讨论一些最基本的概念,有助于读者熟悉各种环境生成的汇编码,更好地进行二进制分析.需要注意的是,在C语言的层面来看,main函数是程序的起始入口,但实际上对于可执行文

C语言的main函数到底该怎么写

前言 main函数是程序启动后执行的第一个自定义函数.从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么哪一种才是正确的呢?我们先来看看目前有哪些版本. main函数版本 第一种,没有返回值,没有入参: main() 在C89标准中,这种写法是可以接受的,但使用现在的编译器编译时,会报告警,并且会将其返回值默认为int.实际上,如果函数没有显式声明返回类型,那么编译器会将返回值默认为int. 第二种,返回值为void,没有入参: void main() 这种形式的来源不得而知.

golang中的init函数以及main函数

首先我们看一个例子:init函数: init 函数可在package main中,可在其他package中,可在同一个package中出现多次. main函数 main 函数只能在package main中. 执行顺序 golang里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package main).这两个函数在定义时不能有任何的参数和返回值. 虽然一个package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说,我