当内存不足时,Android会终止某些服务。
像这样:
我知道我可以使用前台服务禁止android杀死我的服务
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
try {
Notification notification = new Notification(R.mipmap.ic_launcher,"this is service", System.currentTimeMillis());
Intent intent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,intent , 0);
notification.setLatestEventInfo(this, "myapp", "myservice", contentIntent);
notification.flags =Notification.FLAG_AUTO_CANCEL;
startForeground(123,notification);
}
catch(Exception e)
{
stopSelf();
}
}
@Override
public void onDestroy() {
super.onDestroy();
stopForeground(true);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
}
但这会在屏幕上显示通知
我宁愿杀死服务而不是显示通知,但我也不想显示已停止的消息。
我找到了一些应用程序,当android杀死它时它不会显示任何消息。
e.g。屏幕调光器
如何禁止android显示app停止消息?
答案 0 :(得分:3)
请检查:https://stackoverflow.com/a/32229266/2965799
根据我已经使用以下代码来处理异常。我想显示另一条消息,所以我添加了自己的消息,但是如果你使用他的答案就没有消息。
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
new Thread() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(getActivity(),"Your message", Toast.LENGTH_LONG).show();
Looper.loop();
}
}.start();
try
{
Thread.sleep(4000); // Let the Toast display before app will get shutdown
}
catch (InterruptedException e) { }
System.exit(2);
}
});
答案 1 :(得分:2)
一种方法是使用您自己的自定义失败代码实现UncaughtExceptionHandler
。安装处理程序的API是:
public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh);
班级is documented here。作为一个非常基本的例子:
import java.lang.Thread.UncaughtExceptionHandler;
public final class CrashHandler implements UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
android.util.Log.wtf("My app name", "Oops, caught it dying on me!");
}
}
一个完整的工作示例是available here。