本demo源码下载地址 App拉起机制源码下载

简介:

做智能售卖设备需要app一直在前台显示,但是有时由于一些不当操作或者系统原因会使app退出,导致设备不能使用。这时就需要拉起机制了。

拉起机制目前实现方式主要有2种。

1、利用Activity生命周期

创建一个类MyApp继承自Application类,在该类通过监听所有activity生命周期来判断activity是否全部销毁,以此来判断app是否退出。
代码如下:

/**
*  监听各个Activity生命周期情况
*/
private void startActivityLifeListener(){registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {showLog("add activity "+activity.toString());}@Overridepublic void onActivityStarted(Activity activity) {mActivityCount++;showLog(activity.getComponentName()+" onActivityStarted activityCounts= "+mActivityCount);}@Overridepublic void onActivityResumed(Activity activity) {}@Overridepublic void onActivityPaused(Activity activity) {showLog(activity.getComponentName().toString()+" onActivityPaused");}@Overridepublic void onActivityStopped(Activity activity) {mActivityCount--;showLog(activity.getComponentName()+" onActivityStopped activityCounts= "+mActivityCount);if (mActivityCount <= 0){// 5秒后拉起new Handler().postDelayed(new Runnable() {@Overridepublic void run() {showLog("try to restart");Intent intent = new Intent(getApplicationContext(), MainActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);}}, 5000);}}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {}@Overridepublic void onActivityDestroyed(Activity activity) {showLog("remove activity "+activity.toString());}});
}

然后在onCreate方法里面调用startActivityLifeListener()方法。

2、利用RunningAppProcessInfo类判断

通过ActivityManager类获取所有正在运行的进程,然后利用app包名找到应用的运行进程,再判断是否处于后台,不过该方法在有些系统版本可能不能用。
创建一个远程服务类PullUpService在后台一直运行轮询检查app是否后台运行。代码如下:

package com.mhwang.apppullup;import android.app.ActivityManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;
import android.util.Log;import java.util.List;/** 后台拉起服务
* Author : mhwang
* Date : 2018/11/6
* Version : V1.0
*/
public class PullUpService extends Service implements Runnable{private boolean running = false;private Intent intent;private Thread thread;private static void showLog(String s){Log.d("PullUpService=>", s);}public IBinder onBind(Intent intent) {return null;}public void onCreate(){super.onCreate();intent = getPackageManager().getLaunchIntentForPackage(getPackageName());if (intent != null) {intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);}showLog("onCreate");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {showLog("onStartCommand");if(thread == null){thread = new Thread(this);thread.start();}return START_STICKY;}@Overridepublic void onDestroy() {showLog("onDestroy");running = false;if(thread != null && !thread.isInterrupted()){try {thread.interrupt();thread.join(100);} catch (InterruptedException e) {e.printStackTrace();}}thread = null;super.onDestroy();}@Overridepublic void run() {running = true;showLog("background service start");while(running){showLog("check background");if(isBackground(PullUpService.this)){showLog("restart activity");startActivity(intent);}SystemClock.sleep(10 * 1000);         // 由于模拟器较卡,这里提高10秒检查一次}}/** 判断是否处于后台* @param context* @return true:处于后台, false:不处于后台*/public static boolean isBackground(Context context) {ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();if(appProcesses == null){return false;}for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {if (appProcess.processName.equals(context.getPackageName())) {if (appProcess.importance != ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {return true;} else {return false;}}}return false;}}

记得在AndroidMainifest.xml注册该服务。

<service android:name=".PullUpService" android:process=":remote"/>

然后在MyApp类开启服务:

如下图所示,使用back键和home键退出app,每隔5秒后都能有效拉起(图示效果运行在模拟器系统版本4.4.2)。但是有个缺点就是使用多任务键杀死时,由于此时整个app都被干掉了,因此MyApp里面的拉起机制不能生效。

Android app添加后台拉起机制相关推荐

  1. android app 的后台代码,包括后台的Android美食APP项目开源代码

    项目简介 小食光定位为一款集美食,社交,LBS服务于一体的美食推荐APP.为你发现周边美食的同时提供一个吃货分享的平台. APP截图 功能模块 美食推荐 :提供基础的美食信息查询: 商家推荐 : 基于 ...

  2. 如何为Android App 添加快捷方式

    文章目录 概述 效果 好处 添加方式 静态添加 动态添加 概述 效果 好处 可以方便用户直接在桌面跳到目标页面 可以让你的App显得更加专业(不过切忌添加过多,1-3个就够了) 添加方式 静态添加 在 ...

  3. Android App添加广告

    在Android应用中添加广告是开发者收入之一,但有广告的应用对于用户来说比较反感,很多事情都是相互矛盾.如何在我们的APP中添加广告呢?移动广告平台为我们提供了相应的SDK,只需要下载他们的SDK, ...

  4. android app应用后台休眠,安卓手机锁屏后程序自动关闭,怎么设置手机app允许锁屏后台运行...

    原标题:安卓手机锁屏后程序自动关闭,怎么设置手机app允许锁屏后台运行 安卓手机锁屏后,很多程序就会自动关闭,实际上,这是安卓手机的一种保护机制.为了使系统能够流畅稳定的运行以及更加省电,它都会在手机 ...

  5. android app如何后台自启动,商家骑手端允许后台运行APP设置方法(安卓)

    随着手机的普及,手机上安装的应用越来越多,手机厂商为了加长手机待机时间,对于APP都会进行强制关闭, 一般时间为3-10分钟,每个品牌的时间不一定. 这就导致很多APP会自动杀死.导致商家和骑手无法及 ...

  6. android app锁定后台运行的方法

    想直接看图操作,可以android 下一个 小米穿戴 然后 我->开启后台运行权限 ->点击当前手机后面的 里面有 小米MIUI,华为EMUI,OPPO ColorOS ,Vivo Fun ...

  7. Android后台杀死系列之一:FragmentActivity及PhoneWindow后台杀死处理机制

    App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivity+Fragment的时候会更加频繁 ...

  8. Android应用后台网络管控机制

    应用后台网络管控机制 概述 在维护手管应用时,经常遇到与应用后台网络控制相关的问题,在解决这些问题的过程中,学习了下应用后台网络控制的流程以及一些日志的分析方法,现在把它总结一下,方便自己以及他人的学 ...

  9. java app退出登录_java – 通过从一个Activity调用一个函数,将退出按钮添加到Android App...

    我在一个Activity中有以下功能 public void AppExit() { Editor edit = preferences.edit(); edit.putString("pr ...

最新文章

  1. centos7.3网络实验环境(金个人)
  2. 《电路学习第三天》 之 彩扩机项目设计
  3. tensorflow tf.matmul() (多维)矩阵相乘(多维矩阵乘法)
  4. 字段中存在空值的问题测试
  5. st7789v tft 驱动电路_OLED显示屏,行驱动电路设计,单片机AT89C51与和显示屏的硬件接线...
  6. WebShop WebSocket server 和WebSocket客户端的一对多关系维护
  7. QT之深入理解QThread
  8. Project2010简易操作指南[转]
  9. MVC3.0与C#截取字符串
  10. 小米机器狗CyberDog
  11. 74LS 系列与 74HC,74HCT,CD系列的区别
  12. keil5怎么添加stc芯片库
  13. 使用Aspose给PDF加密,免受未经授权的访问和内容篡改
  14. 硬石类山水盆景的制造技法
  15. iOS 获取设备UDID
  16. Mac的聚焦搜索Spotlight搜索不准确问题
  17. 【译】JavaScript中的Promises
  18. lnmp单独安装php,lnmp 环境,再单独安装php7.2 的版本,多版本php 同时运行
  19. Ubuntu Server上如何安装Gi
  20. android 8 忘记图案,安卓手机忘记锁屏图案密码六种解决办法

热门文章

  1. 【转】从五个方面解读APM
  2. java 环形链表的示例
  3. Perceptive Advisors携手多个战略联盟创立联拓生物(LianBio)并建构营运平台
  4. ubuntu右上角的输入法图标不见了:解决方案
  5. Python-requests-12306-购票
  6. 谷歌浏览器输入baidu.com无法访问
  7. MVC中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
  8. Linux下双网卡绑定bond0,1,4
  9. 燃气管道泄漏监测报警系统
  10. 学习红客技术必备,手把手教你成为“安防第一人”