android 应用自动重启,Android:如何在“强制关闭”后自动重启应用程序?
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:如何在“强制关闭”后自动重启应用程序?相关推荐
- 等Excel工作簿关闭后自动加密压缩备份
; ; 等Excel工作簿关闭后自动加密压缩备份.ahk ; ; 腾讯QQ号 595076941 ; 作者:boai ; 写作日期:2019年5月15日 ; 版本号:第1版 ; 手机号(中国移动) 1 ...
- 虚拟机强制关闭后无法打开
虚拟机强制关闭后再次打开出现黑屏. 方法一: 找到虚拟机所在目录下的.vmx文件: "选择以记事本的方式"打开. 把"vmci0.present = "TRUE ...
- html 怎么几秒后自动隐藏,3秒或5秒后自动隐藏提示消息和重定向到另一页
在提交表单的时候,每当用户输入有错误时要提示用户错在哪里,以便用户改正,从而顺利完成表单的提交.通常的做法是,当用户填写完了表单的所有项,提交表单时,从头开始检查,当检查到有错误时立即返回,把具体的错 ...
- Android无障碍强制关闭软件,安卓手机后台程序不能彻底关闭?试试这个强制关闭的功能!...
原标题:安卓手机后台程序不能彻底关闭?试试这个强制关闭的功能! 相信大家都有手机吧,可能差一点的用的是千元手机,好一点的是最新旗舰或者是苹果手机.当然了,用什么不关键,关键的是看怎么用.在安卓手机的使 ...
- app闪退后重启_Android app 如何实现崩溃后自动重启
Android app 如何实现崩溃后自动重启 由于有很多场景需要让自己的app一直保持运行状态,比如客户的launcher,或者定制app. 都希望在自己的app崩溃之后还可以自重启. 对于这样子 ...
- mongodb3 重启_如何重启ipad pro并强制关闭各种型号iPad
由于iPad在睡眠模式下具有较长的电池寿命和最低功耗,因此大多数用户一般不会彻底关闭iPad,并在它们在耗尽电池电量之前对其充电. 但出于多种原因,如果用户暂时不使用iPad,最好将iPad完全关闭. ...
- 计算机进程关闭后又重启,Windows 10电脑关机后又自动重启如何解决
部分Windows 10系统的用户可能会碰到这样的情况,在系统中执行关机操作后,电脑关闭后又自动重启了,这个问题可以说非常烦人. 下面会列出几种有可能解决问题的办法,但由于出现关机重启的原因多种多样, ...
- 电脑关闭计算机怎么重启计算机,教您电脑关机后总是重启怎么办
电脑关机后自动重启的问题,一直困扰一些朋友,通常就是关闭系统后,电脑又自己开机启动了,我们不得不拔掉电源或强制关机,要解决电脑无法关机变重启的问题就要找到原因然后解决,下面,小编讲处理电脑关机后总是重 ...
- java 不重启部署_编译Java类后不重启Tomcat有两种方式:热部署、热加载
不重启Tomcat有两种方式:热部署.热加载 热部署:容器状况在运行时重新部署整个项目.这类环境下一般整个内存会清空,重新加载,这类方式 有可能会造成sessin丢失等环境.tomcat 6确实可以热 ...
最新文章
- 5MB的神经网络也高效,Facebook新压缩算法造福嵌入式设备
- python查询天气
- Nvidia CUDA初级教程2 并行程序设计概述
- vmware克隆主机
- jQuery编程规范与最佳实践(附带一些个人的笔记)
- IOS-UISearchBar
- [msi]Cannot open database file. System error -2147287035
- [C#基础]说说委托+=和-=的那些事
- php 获取alexa排名
- EBS 采购订单入库
- 新能力 | 云开发CMS内容管理系统,5分钟搞定小程序管理后台
- cdr 表格自动填充文字_常平办公软件培训分享之word表格自动填充序号
- Linux的命令回收站在哪,Trash-Cli:Linux 上的命令行回收站工具
- iOS-高德地图点击地图获取点击点对应的地理位置,并添加自定义的大头针
- android重启自身应用APP
- iOS开发之去除图片白色背景
- ​我的第三本译作《机器学习即服务》上架啦
- 优维低代码:第三方接口接入
- python筛选股票_GitHub - mykazey/stock_pick: 这时一个通过设定选股条件来帮我们筛选股票的python程序...
- 23、自动喷水灭火系统采用氯化聚氯乙烯管材及管件时的要求
热门文章
- 推荐系统应用研究:音乐电台
- 鸿蒙升级完成任务,诛仙轮回任务第五章-鸿蒙(超详细版111P)
- 新工科背景下计算机类专业英语教学,外国语学院教师参加“新工科背景下高校外语教学改革与专业建设高端论坛”...
- 给即将大三的自己一封信
- Windows平台类毕业论文文献包含哪些?
- 【Windows】如何把Windows自带壁纸、锁屏壁纸取出作为自己的桌面壁纸?(附:批量更改文件后缀名的方法)
- Android学习之导航--摘自黑马程序员
- 计算机视觉学习(六):标定手机相机参数
- 三国杀移动版显示服务器忙,三国杀移动版
- go install命令