Android App保活的方式

这篇具有很好参考价值的文章主要介绍了Android App保活的方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

在Android系统中,当应用程序进入后台或者被用户关闭后,系统会自动回收该应用程序的资源,以达到优化系统性能的目的。但是,有些应用程序需要在后台长时间运行,比如音乐播放器、即时通讯等,这时就需要使用一些技术手段来保持应用程序的运行状态,以确保应用程序能够正常运行。

本文将介绍一些常用的Android App保活的方式。

一、前台服务

前台服务是一种比较常用的保活方式,它可以将应用程序的服务提升到前台,使得系统不会轻易回收该服务。在前台服务中,可以通过Notification来显示应用程序的状态,以提醒用户该应用程序正在运行。

在实现前台服务时,需要注意以下几点:

  1. 在服务中调用startForeground()方法将服务提升到前台,并传入一个Notification对象。
  2. Notification对象需要设置合适的图标、标题、内容等信息,以便用户能够识别该服务的作用。
  3. 在服务不再需要运行时,需要调用stopForeground()方法将服务从前台移除。

示例代码

public class ForegroundService extends Service {
    private static final int NOTIFICATION_ID = 1;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Notification notification = new Notification.Builder(this)
                .setContentTitle("App正在运行")
                .setContentText("点击返回App")
                .setSmallIcon(R.drawable.ic_launcher).build();
        startForeground(NOTIFICATION_ID, notification);
        return super.onStartCommand(intent, flags, startId);
    }

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

 在Activity中启动前台Service:

 Intent intent = new Intent(this, ForegroundService.class);
 startService(intent); 

二、定时唤醒

定时唤醒是一种通过定时发送广播来唤醒应用程序的方式。在应用程序进入后台后,可以通过AlarmManager来设置定时任务,以便在一定时间后唤醒应用程序。

在实现定时唤醒时,需要注意以下几点:

  1. 在应用程序进入后台时,需要通过AlarmManager来设置定时任务,并传入一个PendingIntent对象。
  2. PendingIntent对象需要设置合适的Action、Category等信息,以便系统能够正确地识别该PendingIntent。
  3. 在定时任务触发时,系统会发送一个广播,应用程序需要在BroadcastReceiver中接收该广播,并进行相应的处理。

示例代码: 

public class KeepAliveReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (Intent.ACTION_SCREEN_ON.equals(action)) {
            // 屏幕亮屏 
            startKeepAliveService(context);
        } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
            // 屏幕关闭 
            stopKeepAliveService(context);
        } else if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
            // 网络状态变化 
            NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            if (networkInfo != null && networkInfo.isConnected()) {
                startKeepAliveService(context);
            } else {
                stopKeepAliveService(context);
            }
        }
    }

    private void startKeepAliveService(Context context) {
        Intent intent = new Intent(context, KeepAliveService.class);
        context.startService(intent);
    }

    private void stopKeepAliveService(Context context) {
        Intent intent = new Intent(context, KeepAliveService.class);
        context.stopService(intent);
    }
}

在AndroidManifest.xml中注册广播接收器:

<receiver android:name=".KeepAliveReceiver">
<intent-filter>
<action android:name="android.intent.action.SCREEN_ON"/>

<action android:name="android.intent.action.SCREEN_OFF"/>

<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>

</receiver>

三、双进程守护

双进程守护是一种通过启动两个进程来保持应用程序的运行状态的方式。在应用程序进入后台时,可以通过启动一个守护进程来保持应用程序的运行状态。

在实现双进程守护时,需要注意以下几点:

  1. 在应用程序进入后台时,需要启动一个守护进程,并将该进程的优先级设置为较高。
  2. 守护进程需要定时检测主进程是否存活,如果主进程已经被回收,则需要重新启动主进程。
  3. 在主进程中,需要通过Binder机制将主进程和守护进程进行通信,以便守护进程能够及时检测主进程的状态。

示例代码:

主进程:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        startDaemonProcess();
    }

    private void startDaemonProcess() {
        Intent intent = new Intent(this, DaemonService.class);
        startService(intent);
    }
}

守护进程:

public class DaemonService extends Service {

    private static final String TAG = "DaemonService";

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "onStartCommand: ");
        startForeground();
        startMainProcess();
        return super.onStartCommand(intent, flags, startId);
    }

    private void startForeground() {
        Notification notification = new Notification.Builder(this)
                .setContentTitle("App正在运行")
                .setContentText("点击返回App")
                .setSmallIcon(R.drawable.ic_launcher)
                .build();
        startForeground(1, notification);
    }

    private void startMainProcess() {
        String packageName = getPackageName();
        String className = MainActivity.class.getName();
        Intent intent = new Intent();
        intent.setClassName(packageName, className);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

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

在AndroidManifest.xml中注册守护进程:

<service android:name=".DaemonService" android:process=":daemon" /> 

四、JobScheduler

JobScheduler是一种Android系统提供的调度器,可以用来执行一些延迟任务或者周期性任务。在应用程序进入后台时,可以通过JobScheduler来设置一个延迟任务,以便在一定时间后唤醒应用程序。

在实现JobScheduler时,需要注意以下几点:

  1. 在应用程序进入后台时,需要通过JobScheduler来设置一个延迟任务,并传入一个JobInfo对象。
  2. JobInfo对象需要设置合适的延迟时间、执行条件等信息,以便系统能够正确地执行该任务。
  3. 在任务触发时,系统会发送一个广播,应用程序需要在BroadcastReceiver中接收该广播,并进行相应的处理。

总结

以上是Android App保活的一些常用方式,不同的应用程序可以根据自己的需求选择合适的方式来保持应用程序的运行状态。需要注意的是,保活过程中需要合理使用系统资源,以避免对系统性能造成影响。文章来源地址https://www.toymoban.com/news/detail-588485.html

到了这里,关于Android App保活的方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android APP开机启动,安卓APP开发自启动,安卓启动后APP自动启动 Android让程序开机自动运行APP

    第一步设置获取广播后的业务 第二查权限给APP 理论以上两步做完就可以了。APP也能收到广播信息了, 但是APP没有在桌面启动。 经过再研究,发现要在手机再设置自动开启等业务,以下是小米、魅族的系统设置的一些内容,其它平台自己研究。 这里已经显示收到广播信息  

    2024年02月06日
    浏览(41)
  • Android大作业:安卓开发图书管理系统APP

    Android Studio开发项目图书管理系统项目视频展示: 点击进入图书管理系统项目视频 现在是一个信息高度发达的时代,伴随着科技的进步,文化的汲取,人们对于图书信息的了解与掌握也达到了一定的高度。尤其是学生对于知识的渴求更是与日俱增。图书馆作为学生学习知识的

    2024年02月07日
    浏览(48)
  • 安卓APP证书Android签名证书.keystore文件制作生成

    将app发布到应用宝时,而上传安装包时提示如下图时, 但您或您的团队从未上传该应用,您可以通过认领功能认领应用。认领成功后该应用会自动转入您的账户下,同时保留应用全部数据,您可以在应用管理中进行管理。 1.点击认领应用 ,确认需认领应用的包名是否是你的

    2024年02月02日
    浏览(37)
  • 基于安卓android微信小程序的旅游app系统

    随着人民生活水平的提高,旅游业已经越来越大众化,而旅游业的核心是信息,不论是对旅游管理部门、对旅游企业,或是对旅游者而言,有效的获取旅游信息,都显得特别重要.自助定制游将使旅游相关信息管理工作规范化、信息化、程序化,提供旅游景点、旅游线路,旅游新闻等服务

    2024年02月06日
    浏览(33)
  • Android安卓开发大作业---模拟电影票小程序APP

    完整项目结构: 登录注册UI设计: 登录成功跳转个人信息界面: 签到功能: 电影主页: (上下图片可以左右滑动查看热映电影) 查看所有热映电影: (可以上下滑动) 选择一部电影查看详细信息: 点击购票: 选位置: (左上角会出现一个定位预览界面,高度还原小程序

    2024年02月04日
    浏览(105)
  • Android安卓实战项目(2)---健身UI APP(源码在文末)

    1.大致浏览 2.功能介绍 (1)功能一 第一个界面点击后可以弹出图像,如图: (2)功能二 界面二的控件可以通过滑动下拉条来调解 MainActivity.java PopupActivity.java FitnessMove.java 链接:https://pan.baidu.com/s/1fE-Koh-VmnFOxNKF9CsQNA?pwd=jynl 提取码:jynl 有开发需求私信作者 15135757306

    2024年02月15日
    浏览(32)
  • 基于安卓Android的房屋租赁系统APP(源码+文档+部署+讲解)

    毕设帮助、技术解答、源码交流 联系方式见文末。 房屋租赁App设计的目的是为用户提供房源信息、租房订单、房源资讯等方面的平台。 与PC端应用程序相比,房屋租赁App的设计主要面向于房主,旨在为管理员和租客、房主提供一个房屋租赁App。租客可以通过APP及时查看房源

    2024年02月22日
    浏览(30)
  • 基于安卓系统(android)记事本APP管理系统设计与实现

    目录 摘要 I Abstract II 1 绪论 1.1 课题来源、目的和意义 1 1.2 国内外基本研究情况 1 2 需求分析 2.1 用户需求 4 2.2 功能需求 4 2.3 数据库选择 6 2.4 性能需求 6 3 概要设计 3.1 功能概要设计 7 3.2 数据库概要设计 13 4 详细设计 4.1 功能设计 15 4.2 数据库设计 30 5 系统功能实现 5.1 系统架

    2024年02月11日
    浏览(29)
  • Android实现App内自动升级,适配了安卓7、8及以上版本

            应用发布后,要实现灰度升级控制,如果只依赖各家应用市场是不够的,还需要自己在应用中控制升级逻辑。并且每家应用市场上新审核也是一件很麻烦的事情,尤其像至简网格这样的应用,甚至没在应用市场上架,更不可能依赖它们了。所以必须要在应用中实现自

    2024年02月10日
    浏览(46)
  • 基于安卓Android的校园点餐系统APP(源码+文档+部署+讲解)

    毕设帮助、技术解答、源码交流 联系方式见文末。 使用点餐系统app相对传统点餐管理方式具备很多优点:首先可以大幅提高点餐信息检索,只需输入点餐相关信息就能在数秒内反馈想要的结果;其次可存储大量的点餐信息,同时点餐信息安全性有更高的保障;相比纸质文件

    2024年04月16日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包