Android:如何在“强制关闭”后自动重启应用程序?

在Android应用程序中,如果我们没有得到正确的例外,我们通常会收到“强制关闭”错误。

如果强行关闭,如何自动重启我的应用程序?

是否有任何特定的权限用于此?

5个解决方案

92 votes

要做到这一点,你必须做两件事:

避免“强制关闭” - 标准的应用程序崩溃方式。

无论如何都要在发生崩溃时设置重启机制。

请参阅以下如何执行以下操作:

调用onCreate()以捕获所有未捕获的异常,在这种情况下将调用PendingIntent方法。 “强制关闭”将不会出现,应用程序将无法响应,这不是一件好事。为了在崩溃时重新启动应用程序,您应该执行以下操作:

在onCreate()方法中,在您的主要活动中初始化一个PendingIntent成员:

onCreate()

然后将以下内容放入onCreate()方法中:

AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, intent);

System.exit(2);

您还必须致电onCreate(),否则将无法使用。这样,您的应用程序将在2秒后重新启动。

最终你可以在应用程序崩溃的意图中设置一些标志,并且在你的onCreate()方法中你可以显示一个对话框“我很抱歉,应用程序崩溃了,希望永远不会再次:)”。

Gyuri Majercsik answered 2019-06-14T07:59:02Z

17 votes

诀窍是确保它首先不强制关闭。

如果使用UncaughtExceptionHandler方法,则可以捕获导致应用程序强制关闭的异常。

有关使用UncaughtExceptionHandler记录应用程序引发的异常的示例,请查看此问题。

Dave Webb answered 2019-06-14T07:59:42Z

7 votes

如果您使用Crittercism或其他一些错误报告服务,接受的答案几乎是正确的..

final UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {

public void uncaughtException(Thread thread, Throwable ex) {

Intent launchIntent = new Intent(activity().getIntent());

PendingIntent pending = PendingIntent.getActivity(CSApplication.getContext(), 0,

launchIntent, activity().getIntent().getFlags());

getAlarmManager().set(AlarmManager.RTC, System.currentTimeMillis() + 2000, pending);

defaultHandler.uncaughtException(thread, ex);

}

});

Renetik answered 2019-06-14T08:00:07Z

2 votes

public class ForceCloseExceptionHandalingActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

setContentView(MyLayout());

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {

@Override

public void uncaughtException(Thread paramThread, Throwable paramThrowable) {

myHandaling(paramThread, paramThrowable);

}

});

}

private ViewGroup MyLayout(){

LinearLayout mainLayout = new LinearLayout(this);

mainLayout.setOrientation(LinearLayout.VERTICAL);

Button btnHello =new Button(this);

btnHello.setText("Show all button");

btnHello.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

setContentView(MyLayout2());

}

});

mainLayout.addView(btnHello);

return mainLayout;

}

private ViewGroup MyLayout2(){

LinearLayout mainLayout = new LinearLayout(this);

mainLayout.setOrientation(LinearLayout.VERTICAL);

Button btnHello =new Button(this);

btnHello.setText("I am a EEROR uncaughtException");

btnHello.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Log.e("Alert","btn uncaughtException::");

Toast.makeText(ForceCloseExceptionHandalingActivity.this, "Alert uncaughtException222",Toast.LENGTH_LONG).show();

View buttone = null;

setContentView(buttone);

}

});

Button btnHello2 =new Button(this);

btnHello2.setText("I am a EEROR Try n catch");

btnHello2.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

try{

View buttone = null;

setContentView(buttone);

}

catch (Exception e) {

Log.e("Alert","Try n catch:::");

Toast.makeText(ForceCloseExceptionHandalingActivity.this, "Alert Try n catch",Toast.LENGTH_LONG).show();

setContentView(MyLayout());

}

}

});

mainLayout.addView(btnHello);

mainLayout.addView(btnHello2);

return mainLayout;

}

public void myHandaling(Thread paramThread, Throwable paramThrowable){

Log.e("Alert","Lets See if it Works !!!" +"paramThread:::" +paramThread +"paramThrowable:::" +paramThrowable);

Toast.makeText(ForceCloseExceptionHandalingActivity.this, "Alert uncaughtException111",Toast.LENGTH_LONG).show();

Intent in =new Intent(ForceCloseExceptionHandalingActivity.this,com.satya.ForceCloseExceptionHandaling.ForceCloseExceptionHandalingActivity.class);

startActivity(in);

finish();

android.os.Process.killProcess(android.os.Process.myPid());

}

@Override

protected void onDestroy() {

Log.e("Alert","onDestroy:::");

Toast.makeText(ForceCloseExceptionHandalingActivity.this, "Alert onDestroy",Toast.LENGTH_LONG).show();

super.onDestroy();

}

Satya answered 2019-06-14T08:00:25Z

1 votes

只需在您的包中添加此类

public class MyExceptionHandler implements

java.lang.Thread.UncaughtExceptionHandler {

private final Context myContext;

private final Class> myActivityClass;

public MyExceptionHandler(Context context, Class> c) {

myContext = context;

myActivityClass = c;

}

public void uncaughtException(Thread thread, Throwable exception) {

StringWriter stackTrace = new StringWriter();

exception.printStackTrace(new PrintWriter(stackTrace));

System.err.println(stackTrace);// You can use LogCat too

Intent intent = new Intent(myContext, myActivityClass);

String s = stackTrace.toString();

//you can use this String to know what caused the exception and in which Activity

intent.putExtra("uncaughtException", "Exception is: " + stackTrace.toString());

intent.putExtra("stacktrace", s);

myContext.startActivity(intent);

//for restarting the Activity

Process.killProcess(Process.myPid());

System.exit(0);

}}

然后简单地致电:

Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler(this,

SplashScreenActivity.class));

Suraj Vaishnav answered 2019-06-14T08:00:57Z

android 应用自动重启,Android:如何在“强制关闭”后自动重启应用程序?相关推荐

  1. 等Excel工作簿关闭后自动加密压缩备份

    ; ; 等Excel工作簿关闭后自动加密压缩备份.ahk ; ; 腾讯QQ号 595076941 ; 作者:boai ; 写作日期:2019年5月15日 ; 版本号:第1版 ; 手机号(中国移动) 1 ...

  2. 虚拟机强制关闭后无法打开

    虚拟机强制关闭后再次打开出现黑屏. 方法一: 找到虚拟机所在目录下的.vmx文件: "选择以记事本的方式"打开. 把"vmci0.present = "TRUE ...

  3. html 怎么几秒后自动隐藏,3秒或5秒后自动隐藏提示消息和重定向到另一页

    在提交表单的时候,每当用户输入有错误时要提示用户错在哪里,以便用户改正,从而顺利完成表单的提交.通常的做法是,当用户填写完了表单的所有项,提交表单时,从头开始检查,当检查到有错误时立即返回,把具体的错 ...

  4. Android无障碍强制关闭软件,安卓手机后台程序不能彻底关闭?试试这个强制关闭的功能!...

    原标题:安卓手机后台程序不能彻底关闭?试试这个强制关闭的功能! 相信大家都有手机吧,可能差一点的用的是千元手机,好一点的是最新旗舰或者是苹果手机.当然了,用什么不关键,关键的是看怎么用.在安卓手机的使 ...

  5. app闪退后重启_Android app 如何实现崩溃后自动重启

    Android app  如何实现崩溃后自动重启 由于有很多场景需要让自己的app一直保持运行状态,比如客户的launcher,或者定制app. 都希望在自己的app崩溃之后还可以自重启. 对于这样子 ...

  6. mongodb3 重启_如何重启ipad pro并强制关闭各种型号iPad

    由于iPad在睡眠模式下具有较长的电池寿命和最低功耗,因此大多数用户一般不会彻底关闭iPad,并在它们在耗尽电池电量之前对其充电. 但出于多种原因,如果用户暂时不使用iPad,最好将iPad完全关闭. ...

  7. 计算机进程关闭后又重启,Windows 10电脑关机后又自动重启如何解决

    部分Windows 10系统的用户可能会碰到这样的情况,在系统中执行关机操作后,电脑关闭后又自动重启了,这个问题可以说非常烦人. 下面会列出几种有可能解决问题的办法,但由于出现关机重启的原因多种多样, ...

  8. 电脑关闭计算机怎么重启计算机,教您电脑关机后总是重启怎么办

    电脑关机后自动重启的问题,一直困扰一些朋友,通常就是关闭系统后,电脑又自己开机启动了,我们不得不拔掉电源或强制关机,要解决电脑无法关机变重启的问题就要找到原因然后解决,下面,小编讲处理电脑关机后总是重 ...

  9. java 不重启部署_编译Java类后不重启Tomcat有两种方式:热部署、热加载

    不重启Tomcat有两种方式:热部署.热加载 热部署:容器状况在运行时重新部署整个项目.这类环境下一般整个内存会清空,重新加载,这类方式 有可能会造成sessin丢失等环境.tomcat 6确实可以热 ...

最新文章

  1. 5MB的神经网络也高效,Facebook新压缩算法造福嵌入式设备
  2. python查询天气
  3. Nvidia CUDA初级教程2 并行程序设计概述
  4. vmware克隆主机
  5. jQuery编程规范与最佳实践(附带一些个人的笔记)
  6. IOS-UISearchBar
  7. [msi]Cannot open database file. System error -2147287035
  8. [C#基础]说说委托+=和-=的那些事
  9. php 获取alexa排名
  10. EBS 采购订单入库
  11. 新能力 | 云开发CMS内容管理系统,5分钟搞定小程序管理后台
  12. cdr 表格自动填充文字_常平办公软件培训分享之word表格自动填充序号
  13. Linux的命令回收站在哪,Trash-Cli:Linux 上的命令行回收站工具
  14. iOS-高德地图点击地图获取点击点对应的地理位置,并添加自定义的大头针
  15. android重启自身应用APP
  16. iOS开发之去除图片白色背景
  17. ​我的第三本译作《机器学习即服务》上架啦
  18. 优维低代码:第三方接口接入
  19. python筛选股票_GitHub - mykazey/stock_pick: 这时一个通过设定选股条件来帮我们筛选股票的python程序...
  20. 23、自动喷水灭火系统采用氯化聚氯乙烯管材及管件时的要求

热门文章

  1. 推荐系统应用研究:音乐电台
  2. 鸿蒙升级完成任务,诛仙轮回任务第五章-鸿蒙(超详细版111P)
  3. 新工科背景下计算机类专业英语教学,外国语学院教师参加“新工科背景下高校外语教学改革与专业建设高端论坛”...
  4. 给即将大三的自己一封信
  5. Windows平台类毕业论文文献包含哪些?
  6. 【Windows】如何把Windows自带壁纸、锁屏壁纸取出作为自己的桌面壁纸?(附:批量更改文件后缀名的方法)
  7. Android学习之导航--摘自黑马程序员
  8. 计算机视觉学习(六):标定手机相机参数
  9. 三国杀移动版显示服务器忙,三国杀移动版
  10. go install命令