900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > android 应用自动重启 Android:如何在“强制关闭”后自动重启应用程序?

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

时间:2024-07-22 16:48:04

相关推荐

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 -06-14T07:59:02Z

17 votes

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

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

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

Dave Webb answered -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 -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 -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 -06-14T08:00:57Z

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。