Android System.exit(code) and android.os.Process.killProcess(pid)或者发生RunTimeException 导致应用重启

Android比system.exit(0)或 Process.killProcess更好的退出应用方案(推荐使用) 在开发过程中发现system.exit(0)或Process.killProcess调用后,如果还存在activity,会导致程序杀死重启等很多问题。 首先在 application中添加boolean值ifexit public class myapplication extends Application { public static boolean ifexit; } 然后在...... 阅读详情

关于 System.exit(code) and android.os.Process.killProcess(pid) 或者发生RunTimeException导致应用重启 的问题,由于没有找到正式官方的文档说明,所以本人通过代码进行了一系列测试发现了某些规律


有不对的请知晓者告知。


首先在android中一个进程对应一个dalvik vm 实例,一个应用可以有一到多个进程也就是对应一到多个dalvik vm instance。一个应用可以有一到多个Task,每个Task 里面可以有一到多个TaskRecord。每个TaskRecord 对应了一个Activity。


OK,再来看一下api 文档时如何解释这两个方法的:


System.exit(code) 

Causes the VM to stop running and the program to exit with the given exit status. If runFinalizersOnExit(boolean) has been previously invoked with a true argument, then all objects will be properly garbage-collected and finalized first.


Process.killProcess(pid)

Kill the process with the given PID. Note that, though this API allows us to request to kill any process based on its PID, the kernel will still impose standard restrictions on which PIDs you are actually able to kill. Typically this means only the process running the caller's packages/application and any additional processes created by that app; packages sharing a common UID will also be able to kill each other's processes.

一个是Stop VM ,一个是Kill Process ,上面说了一个 进程对应一个 VM ,那么不管是调用哪一个方法都会用看到同样的效果


当我们在代码中调用System.exit 或者 Process.KillProcess 的时候肯定会结束掉当前线程,但是会不会重启应用就要根据你调用结束时整个属于这个应用的所有Task的状态来决定:

android中Task 是可以跨进程跨应用的,即不同应用的activity 可能运行在同一个Task  中,System.exit 或者 Process.KillProcess 是根据什么来决定是否重启?重启的时候又是回到的哪一个界面(Activity)的呢?哪些界面会被重启?哪些又不会被重启呢?分为以下几部来说明:


首先:

在每一个时刻Android 系统都有一个Task 列表,维护了当前系统中已启动的应用以及应用中各个界面(Activity)之间的顺序。比如:

Task 1 (App1)

--- taskrecord1 (Activity A) 栈顶

--- taskRecord2 (Activity B)栈底


Task 11(App1)

--- taskrecord1 (Activity c)

--- taskRecord2 (Activity d)


Task2(App 2)

--- taskrecord1 (Activity A)

--- taskRecord2 (Activity B)


Task2(App 3)

--- taskrecord1 (Activity C)

--- taskRecord2 (Activity D)


Task 有顺序,TaskRecord 也是有顺序的,假如当前Task 如上所说,那么 当前手机显示的就是 App1 这个应用程序的 ActivityA界面。


2:是否重启:

当调用System.exit 或者 Process.KillProcess 的时候,首先会结束掉执行该方法所在的进程,然后根据结束掉该应用的时候的该应用的所有Task 状态来决定是否重启, 如果退出时该应用所有Task 中的TaskRecord 数量大于一 就会重启,小于或等于一不会重启,整个应用就结束掉了


3::重启后回到哪一个界面:

重启后会回到该应用的最上一个Task -当前显示的Task(因为一个应用可以有多个Task)中 栈顶的第二个TaskRecord(栈顶第一个将不会被重启),这也说明了为什么需要所有TaskRecord 的数量大于1的原因。


3:哪些会被重启,哪些不会?

上面第二条说了会回到第一个Task 的栈中的第二个TaskRecord,如果栈中在第二个下面还有其他TaskRecord 。那么在按返回键的时候会重新执行下一个TaskRecord  对应Activity  的onCreate 方法,依次类推,直到栈底为止。




 注意: 如果再Activity 的生命周期中执行System.exit 或者 Process.KillProcess 方法的时候一定要注意,在OnCreate ,OnStart,OnResum 的时候栈中是还没有存在该Activity对应的TaskRecord (该Activity还未被添加进去),或者同样在OnPause,OnStop,onDestory 的时候,如果是按Back 那么该Activity  对应的Activity 对应的TaskRecord 在执行System.exit 或者 Process.KillProcess 之前就已经被移除栈了,即在这种情况下会重启回到这个Activity 的上一个的上一个Activity(如果存在的话,如果不存在着直接退出了整个程序)。



举例 1:

1:假如有一个App A ,  有3个Activity :ActivityA,ActivityB,ActivityC。启动顺序为A 启动B ,B启动C

2:首先通过Launcher 启动了A 。如果在A中通过某个点击事件或者在A的OnCreate or onStart  or onResum 方法,或者再A中按返回键的时候在OnStop or OnPause or OnDestroy 中触发了System.exit 或者 Process.KillProcess,那么程序将不会重启

3:如果 在A中启动了B ,并且A没有调用finish 方法,那么如果在B中的OnCreate or onStart  or onResum 方法或者再B中按返回键的时候在OnStop or OnPause or OnDestroy 中触发了System.exit 或者 Process.KillProcess,那么程序也将不会重启,只有当B 启动完成,对应的TaskRecord 已经添加的Task 中了才会重启回到ActivityA。

4:如果在B 中启动了C ,并且B 没有调用finish 方法,那么如果在C中的OnCreate or onStart  or onResum 方法或者再C中按返回键的时候在OnStop or OnPause or OnDestroy 中触发了System.exit 或者 Process.KillProcess,那么程序将会重启,但是重启后回到的界面是A 而非B,应为此时C还未添加到Task 或者已经从Task里面移除了,所以会重启回到除去栈顶的B 的下一个也就是A。当然如果C启动完成已经添加到了Task里面,在C中通过某个点击事件获取其他方式触发了System.exit 或者 Process.KillProcess那么会重启回到B


举例2:

1:有一个App B ,有5个Activity : A,B,C,D,E 。其中A是启动Activity,启动顺序为 A->B->C->D-E

2:假如C的activity:process = "com.test.process1",其他的Activity 使用默认的(名称和ApplicationID 一样),那么当A 启动了B 后B有启动了C ,只要是在C中不管任何地方调用了System.exit 或者 Process.KillProcess都会结束掉“com.test.process1”这个进程,其他进程不受影响,所以C Activity 

会关闭,但是A ,B 保持原样。因为C已经关闭了更具Task 里面的顺序所以显示B 界面(效果和按返回键一样,只是说按返回键不会结束掉进程);

3:接着第二种情况,假如不在C中调用,而是通过C启动了D,因为D 没有指定process ,所以D 和A,B 属于同一个进程。那么如果在D中执行了System.exit 或者 Process.KillProcess。那么会结束掉D所在的进程也就是默认名称的进程,而C 在的进程不受影响,因此再执行

System.exit 或者 Process.KillProcess后会显示C 界面不会立刻重启A,和B ,只有在C界面按返回的时候,这时候发现B 已经关闭了所以系统会自动重启B ,在B  中按返回发现A也不存在了所以会自动重启A。针对此情况有一点需要补充一下,如果D 已经添加到Task 里面后执行的结束方法,那么回到C ,和上面所说的不矛盾(只是C不需要重启因为C在单独的进程可以解释得通),那么如果是在D还未添加到Task 的时候,那么此时Task 里面只有A,B,C 三个。那么为什么任然回到C呢? 而不是B 呢?是因为C 在单独的进程所以不受影响,而顺序决定了C 在B 上面,所有只有回到C而不是B

4:如果A,B,属于同一个进程,C,D,E 属于另一个进程,如果此时Task里面的状态时A-B-C-D-E。 E 在栈顶,那么在E 中执行了结束方法。会重启E 所在的进程回到界面D。在D中按返回重启C ,在C中按返回到B (不重启,不再同一个进程)

5:假如A,B,D 属于同一进程同一个Task 。C 在另一个进程并且另一个Task.那么当启动完成D后,整个应用就有两个Task 。最上一个(当前显示的)Task{TaskRecordA,TaskRecord,B,TaskReocedD},以及另一个Task{TaskRecordC}。那么在D中执行结束方法,会重启回到B界面,返回的顺序是B->A->C.其中B,A 会重启,C不会


总结:总的来说就是当调用System.exit 或者 Process.KillProcess的时候,只会结束当前调用的进程(如果一个应用有多个进程,其他进程不会发生改变,其他进程里面的activity 也不会重起),在根据结束之前整个应用的Tasks 状态(数量和顺序)来决定时候重启,数量决定是否重启,顺序决定重启后回到哪一个界面。


同样当发生RunTimeException 的时候和System.exit 或者 Process.KillProcess效果是一样的。


​开源大模型实战:GLM-4.1V-Thinking本地部署教程(附API调用代码) ​在AI应用从“能用”向“好用”进阶的当下,​的需求愈发强烈:企业需保障数据安全(如医疗影像、金融报告不外传),开发者追求定制化能力(如微调模型适配垂直场景),科研团队则依赖离线环境处理敏感数据。智谱AI开源的​(10B级参数,支持图像、视频、文档多模态推理)凭借的优势,成为本地部署的热门选择。不过,对于“不想折腾技术”的普通用户或快速验证需求的团队而言,​,无需安装配置,打开即用,堪称“零门槛”体验的捷径。本文将分为两部分:先手把手教你​(适合有技术背景的用户),再对比介绍。 阅读详情

相关推荐

第二次 PX4仿真环境搭建过程全记录

参考链接 https://blog.csdn.net/yanwumuxi/article/details/80097294 https://www.ncnynl.com/archives/201709/2013.html 一、安装依赖项 我们使用Debian / Ubuntu LTS 作为Linux的标准支持版本,但是也支持Cent OS 和 Arch Linux的发行版本。 权限设置 警告:永远...

移步换景的博客 2263

Android 进程重启问题 android.os.Process.killProcess()

全局任务栈内有超过一个以上的 Activity 实例。此时,调用 `Process.killProcess(Process.myPid())`后,系统表现,类似“意外关闭”会重建关闭页面的前一个 Activity

打渔还是晒网 —— stone 1647

i.MX RT1064引脚配置与BGA封装选型实战指南

在嵌入式硬件设计中,引脚配置与PCB布局是连接芯片手册与物理实现的关键桥梁,直接影响系统的稳定性与信号完整性。其核心原理在于理解处理器的IOMUX(输入/输出多路复用器)系统与多电源域架构,前者通过软件配置实现引脚功能的灵活复用,后者则为不同外设接口提供独立的电压基准,是保障电源稳定性的基石。从技术价值看,合理的引脚规划能规避信号干扰、电源不稳等潜在风险,提升设计一次成功率。在应用场景上,无论是连接SDRAM、USB、SDIO等高速外设,还是配置UART、I2C等中低速接口,都需要遵循特定的布局布线规则。本

weixin_33217202的博客 314

android exception异常代码,Android DeadSystemException

目前,我们的HockeyApp崩溃报告中出现了DeadSystemException。 它发生在Android 7.0和Android 7.1上。 我们在应用程序的先前版本中没有遇到此异常(当前它们都已被用户使用),因此我想这个异常是由一些代码更改引起的。 但是堆栈跟踪对此并没有帮助。 任何想法?感谢您的任何建议。HockeyApp的堆栈跟踪:java.lang.RuntimeException:...

weixin_35410816的博客 4782

模仿学习(Imitation Learning)概述

什么是模仿学习呢?简单来说,模仿学习(Imitation Learning),就是要训练机器能够复制人类的连续动作,进而达到模仿的目的。其实,Imitation Learning的实用性很高,假设今天有一个训练场景,你不知道该怎么定奖励值(reward),但是你可以收集到专家的示范数据(expert demonstration data),你就可以考虑用Imitation Learning这个方法。因此,模仿学习也被寄予很高的期待,成为下一代强人工智能的关键技术。......

qq_22749225的博客 2万+

RDM协议控制端实战:从数据包构造到高效设备发现算法

本文深入探讨了RDM协议控制端的核心开发流程,涵盖从数据包构造、发送到响应解析的全过程。重点解析了如何利用二分搜寻算法高效实现网络设备发现,并分享了组包、解包中的关键代码实现与常见调试技巧,为舞台灯光与智能硬件领域的嵌入式开发提供实战指导。

week9的博客 457

Android应用停止运行处理策略(如 DeadSystemException)

Android应用停止运行处理策略- https://www.jianshu.com/p/c3da4681a19b Android DeadSystemException- https://stackoverflow.com/questions/42784731/android-deadsystemexception Android DeadSystemException- https://www...

ShareUs的专栏 3万+

Python+OpenCV实战:5分钟搞定机械臂手眼标定(眼在手上模式)

本文详细介绍了使用Python和OpenCV在5分钟内完成机械臂手眼标定(眼在手上模式)的实战教程。通过解析相机坐标系与机械臂基坐标系的转换关系,提供从数据采集到标定矩阵计算的全流程代码实现,帮助开发者快速解决AX=XB问题,提升机械臂视觉引导精度。

weixin_33670786的博客 498

Android System crash DeadSystemException(Service/Activity/终极解决方案)

当Android系统服务已经死亡,app进程与之通讯,会抛出DeadSystemException。可能发生在Activity的生命周期,service的生命周期,其他涉及跨进程通讯,处理起来各有不同

HeXinGen的博客 1万+

别只聊天了!手把手教你为Ollama+Open WebUI搭建本地知识库(基于BGE-M3和Qwen)

本文详细介绍了如何利用Ollama、Open WebUI和BGE-M3构建本地知识库,实现智能问答和文档检索。通过环境准备、文档处理、向量化实战和应用案例,帮助用户突破基础聊天场景,打造高效的个人知识管理体系。特别适合技术文档管理和学术研究场景。

weixin_42523720的博客 479

国科大学习资料--自然语言处理(宗成庆)-2019期末考试题

国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题

无名何许人的博客 2438

Android开发 - Android杀进程的几种方法,ActivityManager.killBackgroundProcesses,Process.killProcess等的用法

Android杀进程的几种方法: System.exit(0), Runtime.getRuntime().exit(0), Process.killProcess(Process.myPid()), ActivityManager.killBackgroundProcesses(), ActivityManager.forceStopPackage(packageName)。

记录和分享程序人生的点点滴滴 4594

【3天快速入门WPF】8-数据绑定基础

以下是一个简单的 WPF 数据绑定示例,使用两个TextBox控件分别表示Name和Age来进行进行数据绑定试验。运行程序后,你会看到初始界面中TextBox 中显示初始名字 “张三”,TextBox 中显示初始年龄 “25”。在 XAML 中创建一个简单的界面,包含一个 TextBox 用于输入名字,一个 TextBox 用于显示年龄。当你在 TextBox 中修改名字时,Person 对象的 Name 属性会被自动更新,反之亦然。它的主要作用是为控件及其子控件提供一个默认的数据源,用于数据绑定。

Zy100Papa的博客 969

android.os.dead,android.os.DeadSystemException

你好,极光推送一直在报这个问题,走过路过的同学是否有遇到该问题,是怎样解决的,谢谢jpush: "cn.jiguang.sdk:jpush:3.6.6",jcore: "cn.jiguang.sdk:jcore:2.3.8"``````android.app.ActivityThread.handleUnbindService(ActivityThread.java:4064)3 ......4 ...

weixin_39716521的博客 895

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

判断服务是否运行引发android.os.DeadSystemException

/** * 判断某个服务是否正在运行的方法 * * @param serviceName 是包名+服务的类名 * @return true代表正在运行,false代表服务没有正在运行 */ public static boolean isServiceWork(Context context,String serviceName) { ...

sunming的博客 9614

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android疑难杂症之KillProcess 和System.exit 无效

地址:http://www.toutiao.com/i6362384168738882050/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=5929823057&utm_medium=toutiao_android 首先就...

weixin_30514745的博客 180

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android.os.DeadSystemException

在程序压测的过程中,出现过此类问题,查了很多资料。都在说是这个问题是系统核心进程出错了,需要重启,所以杀掉了所有的应用。 下面是源代码,源代码,也无法给我们任何的帮助。 /** * The core Android system has died and is going through a runtime restart. All * running apps will be promptly killed. */ public class DeadSystemException extends D

yangyulong0622的博客 6749

Android app主动杀死进程并重启

最近有个bug,这个bug还很容易实现,就是在app授权权限之后,将app放在后台,在设置里对app的权限关闭操作,再从后台打开app,app会crash。

CoderZ的博客 4838

android system.exit(0)后会重启

必须要将前一个activity 给finish()掉

xiaoshixiu的专栏 2016

android.os.Process.killProcess(android.os.Process.myPid());重启应用的原理

Process.killProcess 最终是调用 linux API kill() 发送 SIGKILL 信号,进行收到这个信息都会立即结束进程。 然而Android 下不同的是 ActivityManager 一直监听者进程状态。如果发现进程被kill,会立即重启进行,并重启之前状态对应的Activity、Service、ContentProvider等。 这就是为什么我们调用Proces

ytyese的博客 2351

android Process.killProcess 和 System.exit(0) 区别

1 Process.killProcess 和System.exit(0) 两个都会 kill 掉当前进程。 你可以打开 DDMS 查看进程号,或 adb shell 进入 shell 然后 ps 一下,进程确实被 kill 掉了。 2 如果是在第一个 Activity 调用Process.killProcess 或System.exit(0) 都会 kill 掉当前进程。 但是如果...

weixin_30882895的博客 281

崩溃记录:android.os.DeadSystemException

记录一个系统崩溃,如下图所示,这个崩溃全部出现在三星手机,而且操作系统版本为10,而且都是退到后台之后报的,我猜想应该是应用崩溃导致进程被杀了,然后再进行后续操作是出错了。 具体原因还没找到。 ...

kanglupeng的专栏 1万+

android+os+stack,Android android.os.DeadSystemException解决方案

Android DeadSystemException 出现情况是被系统杀掉服务导致出现的原因,一般出现在后台用户无感知。1.出错堆栈:image.png2.源码分析private void handleServiceArgs(ServiceArgsData data) {Service s = mServices.get(data.token);if (s != null) {try {if (...

weixin_39898248的博客 2203

Android中使用System.exit(0)退出后app又重新启动

System.exit(0):终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。System.exit(0)正常终止程序,有时候在退出安卓应用会使用到。 使用这个方法如果前面存在没有finish()掉的Activity会重新启动,导致退出失败。 MainActivity代码:直接启动第二个Activity: [java] view plain co...

邵东的博客 1万+
上一篇: Android WebView 闪屏问题
下一篇: Android Actionar overflow 不显示的问题
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮克桃在写代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值