Activity崩溃后如何自动重启?

2023-12-02

有没有办法让我创建一个服务来跟踪我的活动类并在崩溃后重新启动它?请注意,我不能使用未捕获的处理程序线程方法来重新启动我的应用程序。我的应用程序应该会崩溃,不用担心那部分。我的应用程序很简单,就像这样

private class AudioRenderer extends Activity {

private MediaPlayer AudioRenderer(String filePath) {
File location = new File(filePath);
        Uri path = Uri.fromFile(location);
  mp= MediaPlayer.create(this, path); 

}
return mp


}

一旦崩溃,在后台监听的服务将自动重新启动我的应用程序。有人知道这怎么可能吗?谢谢!


是的,您可以这样做,如下所述。但如果这些技术可能对实验有意义, 他们是绝对不适合生产。那将是非常丑陋和低效的。

这就是说,这是一个方法:

  • 做你的Service sticky or 重新交付确保它在启动一次并且没有明确停止后始终运行。

  • in your Activity类,静态存储WeakReferences 指向其所有正在运行的实例,并提供一种静态检查当前是否至少分配其中一个实例的方法:

    public class MyActivity extends Activity {
        private static ArrayList<WeakReference<MyActivity >> sMyInstances = new ArrayList<WeakReference<MyActivity >>();
    
        public MyActivity() {
            sMyInstances.add(new WeakReference<MyActivity >(this));            
        }
    
        private static int nbInstances() {
            int ret = 0;
            final int size = sMyInstances.size();
    
            for (int ctr = 0; ctr < size; ++ctr) {
                if (sMyInstances.get(ctr).get() != null) {
                    ret++; 
                }
            }
    
            return ret;
        }
    }
    

(WeakReference是对不会阻止这些对象被垃圾收集的对象的引用,更多详细信息here)

  • 然后,从你的Service, call MyActivity.nbInstances()时。在上次运行崩溃后,它将返回 0 a(通常很短,但理论上不可预测)MyActivity实例。Warning:它会这样做,除非你有内存泄漏关于这个Activity或其底层Context因为此泄漏会阻止崩溃实例的垃圾收集。

  • 然后你只需要启动一个新的实例Activity从你的Service, using startActivity(Intent)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Activity崩溃后如何自动重启? 的相关文章

  • 如何从 AAR 依赖项中排除特定资源?

    有没有一种相当简单的方法来实现模块的build gradle文件来指示应排除依赖项中的某些文件 我特别感兴趣的是从 AAR 中排除某些资源 金丝雀泄密 https github com square leakcanary是一个有趣的库 可帮
  • Android 12:如何防止更改手机壁纸时重新启动活动?

    在 Android 12 上 如果我们开启一个活动 进入手机主屏幕更换壁纸 切换回我们的 Activity 该 Activity 重新启动 看起来它与 Material You 主题有关 我想在我的应用程序进入前台时禁用活动的重新启动 有办
  • 未找到 Gradle DSL 方法:“versionCode()”

    构建我的 Android 项目时遇到问题 我使用Grgit https github com ajoberstar grgit填写versionCode and versionName在 gradle 中 一切工作正常 直到我将 Andro
  • Android - 如何访问 onResume 中 onCreate 中实例化的 View 对象?

    In my onCreate 方法 我正在实例化一个ImageButton View public void onCreate Bundle savedInstanceState super onCreate savedInstanceSt
  • doInBackground 运行时是否可以停止 asynctask?

    我正在 ActivityB Oncreate 中创建异步任务 在该任务中 我正在运行无限 while 循环doInBackground 当我转到上一个活动并再次回到该活动时 创建了另一个异步任务 我的问题现在是两个无限 while 循环正在
  • 将标题设置为操作栏时出现空指针异常

    Error Caused by java lang NullPointerException Attempt to invoke virtual method void android app ActionBar setTitle java
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • Android 手机应用意图

    我想在手机上启动手机应用程序作为意图 我正在使用这个代码 startActivity getPackageManager getLaunchIntentForPackage com android phone 但该函数抛出一个空指针异常 因
  • 在 Android 上的测试用例之外运行 ExtractDecodeEditEncodeMuxTest

    我正在尝试添加在 Android 上提取 解码 编辑 编码和混合视频的功能 因此 我发现了一些非常有用的实现 它是Android CTS的一部分ExtractDecodeEditEncodeMuxTest https android goo
  • invalidateOptionsMenu 在片段中不起作用

    显示或隐藏项目ActionBar根据文本中是否有文本EditText or not 所以 我做了以下事情 public class NounSearch extends android app Fragment EditText seach
  • 如何在 Android 上的 HttpPost 中发送 unicode 字符

    我试图在我的应用程序中允许多语言支持 这会发出 HTTP post 来上传新消息 我需要做什么才能支持日语和其他非拉丁语语言 我的代码目前看起来像这样 note the msg string is a JSON message by the
  • 在 Android 中使用 iText 读取或打开 PDF 文件

    我是 Android 应用程序开发新手 使用 iText 我完成了 PDF 创建并在创建的文件上写入 现在我想阅读该 PDF 文件 如何使用 iText 打开或阅读 PDF 文件 例子将是可观的 那么提前 哪个是渲染 PDF 文件的最佳库
  • 如何覆盖日期选择器的高度和宽度以填充父布局

    我有一个活动包含一个日期选择器 我想设置DatePicker适合屏幕 我试过这个答案 https stackoverflow com questions 6674667 how to customize date pickers width
  • 如何从SurfaceView绘制到Canvas?

    我正在尝试做简单的画家 问题是Android看起来有三个独立的Canvas并给我它来顺序绘制 我用以下方式制作了用户界面SurfaceView 把霍尔德从中拿走 Override protected void onCreate Bundle
  • 有没有办法在Android上创建一个三角形按钮?

    有没有办法创建一个三角形的按钮 我知道我可以将三角形图像作为背景 但这将使三角形之外的区域可单击 有没有办法固定按钮角 X 和 Y 以便我可以将其变成三角形 您可以覆盖OnTouch http developer android com r
  • Android:如何监控WiFi信号强度

    当信号强度发生变化时我会收到通知 我尝试创建以下方法并在 onCreate 中调用它 private void initializeWiFiListener Log i TAG executing initializeWiFiListene
  • 无法在 Android 模拟器中安装 apk

    我正在尝试通过 adb shell 在 ICS 模拟器中安装 apk 从一个站点下载 但出现以下错误 失败 INSTALL FAILED UID CHANGED 可能是什么问题 只需 rm r 有问题的数据目录即可 如果您在安装时遇到此错误
  • 带有空白白屏的 WebView

    我在 DialogFragment 中有一个 webview 它使用以下方式显示文档和 PDF它可以进行几次尝试 但如果用户尝试频繁打开和关闭对话框 webview 将显示空白屏幕 我已经尝试了所有的线程link1 https stacko
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • Android:如何通过右侧的十字按钮清除EditText

    我创建了一个EditText用于搜索 左侧包含搜索图标 右侧包含图标

随机推荐

  • 如何在java中获取命令提示符输出?

    如何获取命令提示符的输出 这意味着我已经打开了这样的命令提示符 Process process Runtime getRuntime exec cmd c start cmd exe K C Editor editorTemp exe 我无
  • 在解析 XML 时保留 CDATA 部分

    我正在尝试将现有的 Xml 文件转换为另一个 xml 文件 并添加一些节点 但是当我解析原始 xml 文件并将其写入另一个 xml 文件时 它会删除所有CDATA来自输出 xml 我怎样才能避免它 这是我的代码 tree ET parse
  • C# Webforms 在代码执行期间显示加载指示器 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我的 Webforms 应用程序数据量很大 主要是执行 ADO net 操作的 ASP 控件 我的加载时间为 5 15 秒 这是正常的 但我想让用户更明显地知道他们的请求正在处理
  • 如何循环遍历js对象中的项目?

    我怎样才能循环浏览这些项目 var userCache userCache john ID 234 name john userCache mary ID 567 name mary userCache douglas ID 42 name
  • random.choice() 有两个参数? [复制]

    这个问题在这里已经有答案了 我在以下掷骰子函数中犯了一个简单的错误 import random def rollDie return random choice 1 2 3 4 5 6 print rollDie 我确实知道我需要将序列作为
  • 如何在 Dart 中编码为 UTF16 Little Endian?

    我正在尝试使用 Dart 来操作程序使用的一些系统变量 我遇到过这样的问题飞镖的utf软件包已停产 并且我还没有找到任何方法来编码为 UTF 16 Little EndianFile 写 Dart 中是否有可以进行字节到 UTF 16 LE
  • 较新的 JRE 版本可以运行使用较旧的 JDK 版本编译的 Java 程序吗?

    运行用 Java 版本 1 6 编译的 Java 程序和相关库时我会遇到任何问题吗 and1 7 我使用 1 7 进行编译 而某些库是使用 1 6 进行编译 并在 1 7 JRE 中运行整个程序 As answered already yo
  • OpenGL 纹理映射顽固地拒绝工作

    我正在用 D 编程语言使用 SDL 和 OpenGL 编写 2D 游戏 目前它只是尝试将纹理映射的四边形渲染到屏幕上 问题是 整个纹理映射部分似乎不太工作 尽管纹理显然加载得很好 分配了一个非零纹理编号 不会导致 glGetError 返回
  • 这里如何使用不完整的类型作为向量的模板参数?

    直到以下程序是合法的以及诸如此类的 include
  • Excel 中的随机数数组

    如何使用以下命令创建随机数数组RAND or RANDBETWEEN功能 我正在尝试用一个公式模拟 10 卷六面骰子 例如 的平均结果 我过去曾尝试过以下方法 但它只创建一个随机数并重复它 SUMPRODUCT ROW A1 A10 0 I
  • 基于 SQL 集的范围

    如何让 SQL 在不循环的情况下重复某些基于集合的操作任意次数 如何让 SQL 对一系列数字执行操作 我基本上是在寻找一种方法来执行基于集合的 for 循环 我知道我可以创建一个包含整数的小表 例如从 1 到 1000 然后将其用于该范围内
  • 如何在使用集合时将项目添加到集合中?

    下面的示例抛出 InvalidOperationException 集合已修改 枚举操作可能无法执行 执行代码时 var urls new List
  • Android WebView在查看html嵌套列表时加载空白

    我正在尝试使用 Android 将大小合理的 html 嵌套列表加载到 WebView 中 问题是当我尝试加载 html 时 它看起来是空白的 现在我已经尝试了几种不同的方法 我首先尝试了 W3Schools Try It Yourself
  • 是否可以在变量中获取 Phalcon\Mvc\View 渲染输出?

    我需要返回 json 对象 该对象具有带有渲染操作的属性 html 是否可以使用 Phalcon vew 进行本地操作 Example posts NewsPost find limit gt 10 view new Phalcon Mvc
  • ImportError:pyInstaller 之后没有名为“tkinter”的模块

    我想做一个可执行文件 但每次运行 exe 时它都会写入ImportError No module named tkinter 以及我在 Stack Overflow 上读到的所有内容都对我没有帮助 我的 python 程序很简单 ODE 求
  • 当我尝试创建触发器时 PostgreSQL 出现语法错误

    我想在 PostgreSQL 中创建触发器 逻辑很简单 我需要触发器 如果 published at更新并且writing at为空 则将published at设置为writing at 我写了这个 但失败了 有人有想法吗 CREATE
  • 为每个子图提供标题 - R Shiny

    我正在尝试使用 blondeclover 的以下代码创建绘图 代码如下 library shiny library ggplot2 library plotly library grid shinyApp ui ui fluidPage f
  • Google 柱形图单个日期和值显示为多个相邻条

    数据表结构如下 cols id label Date pattern type date id Col1 label Col1 Label pattern type number rows c v Date 2017 5 27 v 213
  • WebDriver 关闭弹出窗口

    我的网络驱动程序测试因出现弹出窗口而卡住 我如何在测试中关闭它 这是我的代码 Test public void canGoToSomePage throws Exception final WebDriver webDriver getFi
  • Activity崩溃后如何自动重启?

    有没有办法让我创建一个服务来跟踪我的活动类并在崩溃后重新启动它 请注意 我不能使用未捕获的处理程序线程方法来重新启动我的应用程序 我的应用程序应该会崩溃 不用担心那部分 我的应用程序很简单 就像这样 private class AudioR