首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用前台服务一段时间后app被销毁,如何重启app?

在使用前台服务一段时间后,如果app被销毁,可以通过以下几种方式重新启动app:

  1. 使用系统广播:可以注册一个系统广播接收器,监听系统的开机广播或者自定义的广播,当接收到广播时,启动app。可以通过在AndroidManifest.xml文件中声明接收器,并在接收器的onReceive()方法中启动app。具体代码如下:
代码语言:txt
复制
public class RestartReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            // 启动app
            Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
            if (launchIntent != null) {
                launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(launchIntent);
            }
        }
    }
}
  1. 使用定时任务:可以使用AlarmManager类创建一个定时任务,在指定的时间间隔内检查app是否被销毁,如果被销毁,则重新启动app。具体代码如下:
代码语言:txt
复制
public class RestartService extends Service {
    private static final int RESTART_INTERVAL = 1000 * 60 * 60 * 24; // 24小时

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent restartIntent = new Intent(this, RestartReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, restartIntent, 0);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + RESTART_INTERVAL, RESTART_INTERVAL, pendingIntent);
        return super.onStartCommand(intent, flags, startId);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
  1. 使用后台服务:可以将需要长时间运行的任务放在后台服务中执行,这样即使app被销毁,后台服务仍然在运行,可以通过后台服务重新启动app。具体代码如下:
代码语言:txt
复制
public class BackgroundService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // 执行需要长时间运行的任务
        return START_STICKY;
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        // 重新启动app
        Intent restartIntent = getPackageManager().getLaunchIntentForPackage(getPackageName());
        if (restartIntent != null) {
            restartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(restartIntent);
        }
    }
}

以上是三种常见的重新启动app的方式,可以根据具体需求选择适合的方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何让你的app在后台干掉优雅的启动

有这么一个场景,在用户用着你开发的app的时候,突然某个聊天工具来消息了,切换到聊天工具长时间停留,并且可能做了一些你不知道的操作,比如看视频阿,刷刷消息圈什么的。...然后从“最近打开的应用”中选中该App,回到的界面是C activity,假设App中没有静态变量,这个时候是不会crash的,点击返回到B,这个时候也只是短暂白屏显示B界面。...= 1;//强杀 AppStatusManager public intappStatus= AppStatusConstant.STATUS_FORCE_KILLED; //APP状态初始值为没启动不在前台状态...singleTask的主界面) @Override protected voidrestartApp() { Toast.makeText(getApplicationContext(),"应用回收重启...就是因为MainActivity配置为了Sing了Task,当跳转到这个界面时,MainActivity就会置于Activity Task的最上层,其他的Activity将会被默认销毁掉,利用这种技巧去销毁其他的

2.6K20

小程序架构

首次渲染状态:当收到服务线程提供的初始化数据(json和js中的data数据),渲染小程序界面,渲染完毕,发送“首次渲染完成信号”给服务线程,并将页面展示给用户。...结束状态:页面回收或者销毁、应用系统回收、销毁时触发。 服务线程五大状态: 初始化状态:此阶段仅启动服务线程所需的基本功能,比如信号发送模块。...结束状态:页面回收或者销毁、应用系统回收、销毁时触发。 应用的生命周期对页面生命周期的影响 ? 小程序初始化完成,页面首次加载触发onLoad,只会触发一次。...假如用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时无需重新启动,只需将后台态的小程序切换到前台,这个过程就是热启动;冷启动指的是用户首次打开或小程序微信主动销毁再次打开的情况,此时小程序需要重新加载启动...运行机制 小程序没有重启的概念 当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间(目前是5分钟)会被微信主动销毁 当短时间内(5s)连续收到两次以上收到系统内存告警,会进行小程序的销毁

1.9K30
  • 安卓中activity的生命周期_产品生命周期五个阶段

    如何实现一个符合用户期待的app,我们需要注意下面几点: 使用app的时候,不会因为有来电通话或者切换到其他app而导致程序crash。 用户没有激活某个组件时不会消耗宝贵的系统资源。...离开app并且一段时间返回,不会丢失用户的使用进度。 设备发生屏幕旋转时不会crash或者丢失用户的使用进度。 然而,其中只有三个状态是静态的,这三个状态下activity可以存在一段比较长的时间。...在下面一些关键的场景中会涉及到停止与重启: 用户打开最近使用app的菜单并从我们的app切换到另外一个app,这个时候我们的app停止的。...用户在我们的app里面执行启动一个新activity的操作,当前activity会在第二个activity创建stop。如- – 果用户点击back按钮,第一个activtiy会被重启。...stop时停止这个activity,它仍然会保存View对象的状态(比如EditText中的文字) 到一个Bundle中,并且在用户返回这个activity时恢复它们(下一小节会介绍在activity销毁与重新建立时如何使用

    67510

    应用保活终极总结(二):Android6.0及以上的保活实践(进程防杀篇)

    说起来比较绕口,总之本文要讨论的内容是如何防止Android应用系统“杀掉”,下篇讨论的是“被杀掉”如何让它复活。...(滑动清理除外),说明已经启动保活机制:   - ①"咕咚"禁止了返回键,以保证运动Activity不被销毁;   - ②不断更新通知栏计时,以保证APP始终在前台,防止系统回收;   - ③"...咕咚"清理能够自动重启,通知被删除自动弹出,说明可能有另外一个东西(进程或Service)监听器运动Service(或进程)存活状态,当Service销毁时,立马将其拉起来;   - ④“咕咚...分析: 当"乐动力"处于停止状态时,黑屏状态下,其在短时间内系统杀死,说明保活机制没有启用; 但当处于运动暂停或进行状态时,"乐动力"在一段时间内没有被杀死,且当锁屏时,"乐动力"会自动将运动界面切换到前台...另外,"咕咚"可能还使用了相关的进程清理复活策略。当然,对于复活策略,我们下一篇文章再探讨,本文主要讨论以上APP是通过哪些方式降低进程omm_adj值,防止其系统杀死的。

    4.1K21

    Android入门教程 | 四大组件之Service(前台服务,后台服务

    用户可以感知到app前台服务正在运行。 这个通知(notification)默认是不能移除的。服务停止,通知会被系统移除。...多个组件可同时绑定到该服务,但全部取消绑定,该服务即会被销毁。 Service 相关面试题 1....使用这个返回值时,如果在执行完 onStartCommand ,服务异常 kill 掉,系统不会自动重启服务。 START_REDELIVER_INTENT:重传 Intent。...使用这个返回值时,如果在执行完 onStartCommand ,服务异 常 kill 掉,系统会自动重启服务,并将 Intent 的值传入。...START_STICKY_COMPATIBILITY: START_STICKY 的兼容版本,但不保证服务 kill 一定能重启。 11.

    5.4K30

    23 个重难点突破,带你吃透 Service 知识点「长达 1W+ 字」

    服务可由其他应用组件启动(如 Activity ),服务一旦启动将在后台一直运行,即使启动服务的组件( Activity )已销毁也不受影响。...使用 Context 的 stopService(intent) 方法关闭服务。 该启动方式,app 杀死、Activity 销毁没有任何影响,服务不会停止销毁。...使用这个返回值时 , 如果在执行完 onStartCommand , 服务异常 kill 掉 ,系统不会自动重启服务。...使用这个返回值时,如果在执行完 onStartCommand ,服务异常 kill 掉 系统会自动重启服务 , 并将 Intent 的值传入。...6.2.4 START_STICKY_COMPATIBILITY: START_STICKY 的兼容版本 , 但不保证服务 kill 一定能重启

    94210

    Activity 的 36 大难点,你会几个?「建议收藏」

    兴许的请求均不会创建新的 Activity ,除非这个独特的任务栈系统销毁。...3.6.1 定义 服务器可以定制化跳转 app 页面 app 可以通过 Scheme 跳转到另一个 app 页面 可以通过 h5 页面跳转 app 原生页面 3.6.2 协议格式...举例来说,这可能发生在,如果一个前台活动在一个对话框(其他进程的)运行之后仍然是可视的,比如输入法的弹出时。 寄宿着一个服务,该服务绑定到一个可视的活动。...一个可视进程认为是及其重要的且不会被杀死,除非为了保持前台进程运行。 5.3 服务进程 服务进程是通过 startService() 方法启动的进程,但不属于前台进程和可见进程。...这些进程没有直接影响用户体验,并且可以在任何时候被杀以收回内存用于一个前台、可视、服务进程。

    75920

    从Service到WorkManager

    Service可以在Activity销毁,程序关闭之后都可以继续运行。 不提供界面的应用组件。这其实解释了后台的意义,Service的后台指的是不和界面交互,不依赖UI元素。...比如音乐类APP,在后台播放音乐的同时,可以发现始终有一个通知显示在前台,让用户知道,后台有一个这么音乐相关的服务。...在Android8.0,Google要求如果程序在后台,那么就不能创建后台服务,已经开启的后台服务会在一定时间停止。 所以,建议使用前台Service,它拥有更高的优先级,不易销毁。...--android 9.0上使用前台服务,需要添加权限--> <uses-permission android:name="android.permission.FOREGROUND_SERVICE...WorkManager WorkManager 是一个 API,可供您轻松调度那些即使在退出应用或<em>重启</em>设备<em>后</em>仍应运行的可延期异步任务。

    1.5K30

    android:persistent和android:priority的区别,对进程优先级有什么影响?

    当android:persistent设置为true时,表示该组件具有持久性,即使在设备重启也会保留其状态。而设置为false,则表示该组件不具有持久性,重启后会被销毁。...返回START_STICKY:在Service的onStartCommand()方法中手动返回START_STICKY,以便在Service系统销毁能够重新启动。...监听系统广播判断Service状态:通过监听系统广播,如手机重启、界面唤醒、应用状态改变等,判断Service是否存活。 多个App相互拉活:不同的App之间相互绑定、互相拉活。...设置闹钟定时唤醒:使用AlarmManager设置闹钟,在指定时间周期性地唤醒Service。 开启前台Service:将Service设置为前台Service,提高其优先级。...使用一句代码搞定事情的前提是将应用作为系统应用,并重启手机才会生效。但这种方法需要满足特定条件和限制,并且可能不适用于所有场景。

    1.4K10

    Android面试题(四大组件篇)

    activity注册时写上 android:configChanges=“XXX” 比如横竖屏切换:android:configChanges=“orientation” Q:优先级低的Activity在内存不足回收怎样做可以恢复到销毁前状态...1.当app处于后台系统回收时,app的进程被杀死了,Activity 也回收了,而app的task和activity栈以及相应的intent和数据会被系统保存起来。...当app切回前台时,系统会恢复task和activity栈以及相应的intent和数据。 2.不要在Application类和全局单例类中存放数据,会导致app无法正确恢复状态。...如何去开启一个前台服务前台服务即对用户可见的服务,可以以通知的形式创建前台服务 Q:是否了解ActivityManagerService,谈谈它发挥什么作用?...这适合像下载一样的服务,立即恢复,积极执行。 提升Service优先级 前台服务认为用于已知的正在运行的服务,当系统需要释放内存时不会优先杀掉该进程。

    89920

    Android后台保活实践总结:即时通讯应用无法根治的“顽疾”

    1)控制onStartCommand函数的返回值: 我对这个函数的理解是:当服务异常终止时,是否重启服务?有些文章里面在用这个做保活时,修改的是flag,在我实际测试中是无效。...4)守护进程: 双服务:360会同时杀掉两个服务,分两个apk也一样。 native守护进程:360不会杀掉native的守护进程,但在魅族和华为TL00H中待机一段时间还是会被杀掉。...使用方法:NDKFork port包名/.服务名。...互拉的方式有很多种: 1)可以通过监听系统广播来把自己拉起来 2)可以多个app相互拉 3)可以把自己的服务搞成前台服务 4)在service的onstart方法里返回 STATR_STICK 5)添加...这里推荐使用liunx socket的方式进行类似心跳包的检测,并且当触发检测Service是否被杀死之前,需要判断应用是否已经卸载,如果应用已经卸载,则不再进行检测Service行为,直接调用exit

    2.3K30

    微信小程序版本自动更新

    为了让用户能在我们进行版本迭代及时使用最新版本的功能. 做了以下优化.....当用户点击左上角关闭,或者按了设备Home 键离开微信,小程序并没有直接销毁,而是进入了后台; 当再次进入微信或再次打开小程序,又会从后台进入前台,只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁...热启动是指: 小程序打开,在一段时间内(目前:5分钟)再次被打开,此时会将后台的小程序切换到前台。 冷启动是指: 小程序首次打开或销毁再次被打开....代码如下 // 在app.js里写下以下代码 onLaunch () { if (wx.canIUse('getUpdateManager')) { const updateManager...点击确定: ? 随着小程序的不断更新, 部分功能可能需要最新版的微信客户端才能使用.

    3.4K51

    Activity基础篇

    每一个activity都被定义为一个独立的类,他继承了Android中的android.app.Activity,在Activity类中将使用setContentView方法来显示由视图控件组成的用户界面...) 停止状态,此时activity其他activity完全覆盖 销毁状态,此时activity将会被系统清理出内存 三.activity的回调函数 android系统根据生命周期的不同阶段唤起对应的回调函数来执行代码...onDestroy() 销毁,在activity销毁前所调用的最后一个方法 onRestart() 重新启动 这七个方法贯穿整个activity的生命周期。...六.activity的停止与重启 当我们从APP-A切换到APP-B之后,APP-A会调用onStop()方法,在onStop()方法中我们一般释放一些不再需要的资源 当我们从stop状态回到前台时候,...十.如何关闭一个activity 只要按下返回键就可以销毁当前activity,但是假如我们希望通过代码方式来销毁activity,可以使用activity类提供的finish()方法来实现。

    91320

    Android实现进程保活方案解析

    Android 6.0 引入了待机模式(doze),一旦用户拔下设备的电源插头,并在屏幕关闭一段时间内使其保持不活动状态,设备会进入低电耗模式,在该模式下设备会尝试让系统保持休眠状态。...另外,系统会限制未在前台运行的应用的某些行为,比如说应用的后台服务的访问受到限制,也无法使用 Mainifest 注册大部分隐式广播。...,也能很大程度保活效果较好,但耗电量高,谨慎使用; 双进程守护,这在国产rom中几乎没用,因为划掉app会把所有相关进程都杀死。...3、实现过程: 1)、用startForeground()启动前台服务 前台Service,使用startForeground这个Service尽量要轻,不要占用过多的系统资源,否则系统在资源紧张时,照样会将其杀死...这时我们在其中一个服务中调用 stopForeground(true),这个服务前台状态会被取消,同时状态栏通知也移除。另外一个服务并没有受到影响,还是前台服务状态,但是此时,状态栏通知已经没了!

    9.2K30

    Service三问

    这种方式是会绑定到启动者的生命周期,如果启动者销毁服务也会被销毁。...另外还有一个值START_REDELIVER_INTENT,表示的意思是如果服务异常kill掉,系统会自动重启服务,并将Intent的值传入,这种就适合需要读取intent信息的Service。...提升Service进程的优先级,由于前台服务比后台服务拥有更高的优先级,也就是说系统会优先杀死后台服务。...所以通过startForeground将service放到前台状态,就会减少被杀死的概率 在onDestroy方法里重启Service。...使用JobService或者WorkManager,定时循环某个服务是否还存活,如果销毁了就去启动。 将APK安装到/system/app,变身为系统级应用(几乎不可能,除非是定制系统)

    51040

    提到生命周期,我们是在说什么?

    didChangeDependencies,则用来专门处理State对象依赖关系变化,会在initSate()调用结束Flutter调用。 build,作用是构建视图。...当状态数据发生变化时,我们总是通过调用这个方法告诉Flutter:“我这儿的数据变啦,请使用更新的数据重建UI!”...一旦这三个函数调用,Flutter随后就会销毁老Widget,并调用build方法重建Widget。 销毁 组件的销毁相对比较简单。...比如组件移除,或是页面销毁的时候,系统会调用diactivate和dispose这两个方法,来移除或销毁组件。...在原生iOS、Android开发中,有时我们需要在对应的App生命周期事件中做相应处理,比如APP从后台进入前台、从前台退到后台,或是在UI绘制完成做一些处理。

    1.7K10

    Android可见APP的不可见任务栈(TaskRecord)销毁分析

    ,这个时候,系统如何避免OOM的呢?...前台APP回收场景 如上图,在前台时,左边单栈APP跟进程生命周期绑定,多栈的,不可见栈TaskRecord1是有干掉风险,TaskRecord2不会。下面简单分析下。...AMS的TaskRecord栈释放机制 如果GC的时候,APP的Java内存使用超过了3/4,就会触发AMS的releaseSomeActivities,尝试回收界面,增加可用内存,但是并非所有场景都会真的销毁...3/4的时候,就会看到前一个TaskRecord栈内Activity销毁的Log,同时如果通过studio的layoutinspect查看,会发现APP只保留了新栈内的Activity,验证了之前的分析...作者:看书的小蜗牛 Android可见APP的不可见任务栈(TaskRecord)销毁分析 仅供参考,欢迎指正

    1.5K20

    干货 | 携程机票前端安卓虚拟机测试集群建设实践

    调度管理层:Android 模拟器的创建、销毁、缩扩容、占用、释放、重启、日志排查等,以API方式提供服务。 操作使用层:Android 模拟器的Web GUI可视化和CLI命令行操作使用。 ?...4.2 调度管理层 实现AVD设备的创建、销毁、扩缩容与使用管理、设备状态监控等。...,一段时间内未使用的设备,会自动收回到可用设备池,并通过IM消息通知到用户 根据设备监控报警,自动拉出异常设备重启维护,确认正常加入设备池 综合以上几点,稳定性较原先真机设备大幅提升,满足7x24小时使用的需求...随着规模的逐渐发展和更多用户场景的提出,这套方案也逐渐暴露出了一些问题: 一些APP不支持x86编译 编译为x86,少量场景运行时,底层so文件会出现异常,而同样的场景下,使用ARM编译的APP却没有问题...使用结束,自动缩容回收。 最终较好的支撑了机票前台研发团队每周发布2个版本,业务快速上线的要求。 ? 下图为使用AVD laas设备的测试执行耗时对比。

    97950

    微信小程序文档学习笔记

    ,而是进入了后台; 当再次进入微信或再次打开小程序,又会从后台进入前台 12.只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。...+ 参数) ---- 事件 19.冒泡事件:当一个组件上的事件触发,该事件会向父节点传递。...,只需将后台态的小程序切换到前台,这个过程就是热启动;冷启动指的是用户首次打开或小程序微信主动销毁再次打开的情况,此时小程序需要重新加载启动。...(热启动,打开过,一段时间内再次打开 冷启动,第一次打开,或者销毁再打开) 72.小程序冷启动时如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,即新版本的小程序需要等下一次冷启动才会应用上...(只有销毁才算真正的关闭小程序,下次打开就时冷启动) 1)小程序没有重启的概念 2)当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间(目前是5分钟)会被微信主动销毁 3)当短时间内

    1.2K10

    Android高频面试专题 - 基础篇(三)Service

    使用这个返回值时,如果在执行完 onStartCommand ,服务异常 kill 掉,系统不会自动重启服务。 START_REDELIVER_INTENT=3:重传 Intent。...使用这个返回值时,如果在执行完 onStartCommand ,服务异 常 kill 掉,系统会自动重启服务,并将 Intent 的值传入。...START_STICKY_COMPATIBILITY=0: START_STICKY 的兼容版本,但不保证服务 kill 一定能重启。...如何启动 前台服务是用户可感知的,前台服务与Notification共存亡,启动前台服务通过startForeground(int id, Notification notification)传入一个通知...10、如何提高服务的优先级 设置为前台广播,也是最有效的,之前灰色保活方案使用过 设置优先级,清单文件中intent-filter可以通过android:priority = “1000”设置优先级

    73121
    领券