Android app添加后台拉起机制
本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添加后台拉起机制相关推荐
- android app 的后台代码,包括后台的Android美食APP项目开源代码
项目简介 小食光定位为一款集美食,社交,LBS服务于一体的美食推荐APP.为你发现周边美食的同时提供一个吃货分享的平台. APP截图 功能模块 美食推荐 :提供基础的美食信息查询: 商家推荐 : 基于 ...
- 如何为Android App 添加快捷方式
文章目录 概述 效果 好处 添加方式 静态添加 动态添加 概述 效果 好处 可以方便用户直接在桌面跳到目标页面 可以让你的App显得更加专业(不过切忌添加过多,1-3个就够了) 添加方式 静态添加 在 ...
- Android App添加广告
在Android应用中添加广告是开发者收入之一,但有广告的应用对于用户来说比较反感,很多事情都是相互矛盾.如何在我们的APP中添加广告呢?移动广告平台为我们提供了相应的SDK,只需要下载他们的SDK, ...
- android app应用后台休眠,安卓手机锁屏后程序自动关闭,怎么设置手机app允许锁屏后台运行...
原标题:安卓手机锁屏后程序自动关闭,怎么设置手机app允许锁屏后台运行 安卓手机锁屏后,很多程序就会自动关闭,实际上,这是安卓手机的一种保护机制.为了使系统能够流畅稳定的运行以及更加省电,它都会在手机 ...
- android app如何后台自启动,商家骑手端允许后台运行APP设置方法(安卓)
随着手机的普及,手机上安装的应用越来越多,手机厂商为了加长手机待机时间,对于APP都会进行强制关闭, 一般时间为3-10分钟,每个品牌的时间不一定. 这就导致很多APP会自动杀死.导致商家和骑手无法及 ...
- android app锁定后台运行的方法
想直接看图操作,可以android 下一个 小米穿戴 然后 我->开启后台运行权限 ->点击当前手机后面的 里面有 小米MIUI,华为EMUI,OPPO ColorOS ,Vivo Fun ...
- Android后台杀死系列之一:FragmentActivity及PhoneWindow后台杀死处理机制
App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivity+Fragment的时候会更加频繁 ...
- Android应用后台网络管控机制
应用后台网络管控机制 概述 在维护手管应用时,经常遇到与应用后台网络控制相关的问题,在解决这些问题的过程中,学习了下应用后台网络控制的流程以及一些日志的分析方法,现在把它总结一下,方便自己以及他人的学 ...
- java app退出登录_java – 通过从一个Activity调用一个函数,将退出按钮添加到Android App...
我在一个Activity中有以下功能 public void AppExit() { Editor edit = preferences.edit(); edit.putString("pr ...
最新文章
- centos7.3网络实验环境(金个人)
- 《电路学习第三天》 之 彩扩机项目设计
- tensorflow tf.matmul() (多维)矩阵相乘(多维矩阵乘法)
- 字段中存在空值的问题测试
- st7789v tft 驱动电路_OLED显示屏,行驱动电路设计,单片机AT89C51与和显示屏的硬件接线...
- WebShop WebSocket server 和WebSocket客户端的一对多关系维护
- QT之深入理解QThread
- Project2010简易操作指南[转]
- MVC3.0与C#截取字符串
- 小米机器狗CyberDog
- 74LS 系列与 74HC,74HCT,CD系列的区别
- keil5怎么添加stc芯片库
- 使用Aspose给PDF加密,免受未经授权的访问和内容篡改
- 硬石类山水盆景的制造技法
- iOS 获取设备UDID
- Mac的聚焦搜索Spotlight搜索不准确问题
- 【译】JavaScript中的Promises
- lnmp单独安装php,lnmp 环境,再单独安装php7.2 的版本,多版本php 同时运行
- Ubuntu Server上如何安装Gi
- android 8 忘记图案,安卓手机忘记锁屏图案密码六种解决办法
热门文章
- 【转】从五个方面解读APM
- java 环形链表的示例
- Perceptive Advisors携手多个战略联盟创立联拓生物(LianBio)并建构营运平台
- ubuntu右上角的输入法图标不见了:解决方案
- Python-requests-12306-购票
- 谷歌浏览器输入baidu.com无法访问
- MVC中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
- Linux下双网卡绑定bond0,1,4
- 燃气管道泄漏监测报警系统
- 学习红客技术必备,手把手教你成为“安防第一人”