Android 常驻

文章介绍了在Android中确保应用在后台持续运行的多种保活方案,如设置前台Service、使用AlarmManager定时唤醒、广播接收器等。重点讲述了通过Service结合系统闹钟在App退到后台或锁屏后仍能保持活跃的方法,并提到了权限设置、省电策略和避免自动关闭主页面的处理。
摘要由CSDN通过智能技术生成

Android 常驻

常用保活方案:
1、将Service设置为前台进程
2、在service的onStartCommand方法里返回 STATR_STICK
3、添加Manifest文件属性值为android:persistent=“true”
4、覆写Service的onDestroy方法
5、添加广播监听android.intent.action.USER_PRESENT事件以及其他一些可以允许的事件
6、服务互相绑定
7、设置闹钟,定时唤醒
8、账户同步,定时唤醒
9、开启一个1像素activity 前台保活
10、native进程

经过测试我使用service +系统闹钟方式,主要支持在app退回到桌面,锁屏以后保持app存活,小米手机在不手动杀死进程情况下,测试通过(满电到电量耗尽)。

1.权限设置

 <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
 <uses-permission android:name="android.permission.WAKE_LOCK" />
 <uses-permission android:name="android.permission.DEVICE_POWER"
        tools:ignore="ProtectedPermissions" />
 <uses-permission android:name = "android.permission.GET_TASKS"/>

2.设置service

package com.osram.jay.com.Andonsystem_New;

import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.media.SoundPool;
import android.os.IBinder;
import android.os.SystemClock;
import android.util.Log;

import java.io.IOException;
import java.util.HashMap;

/**
 * 一个定时任务
 */

public class AlarmService extends Service {

    /**
     * 每1分钟更新一次数据
     */
    private static final int ONE_Miniute = 6 * 1000;
    private static final int PENDING_REQUEST = 0;
    public AlarmService() {
    }

    /**
     * 调用Service都会执行到该方法
     */
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        //这里模拟后台操作
      
        //通过AlarmManager定时启动广播
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        long triggerAtTime = SystemClock.elapsedRealtime() + ONE_Miniute;//从开机到现在的毫秒书(手机睡眠(sleep)的时间也包括在内
        Intent i = new Intent(this, AlarmReceive.class);
        @SuppressLint("WrongConstant") PendingIntent pIntent = PendingIntent.getBroadcast(this, PENDING_REQUEST, i, PENDING_REQUEST);
        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pIntent);

        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

3.接受闹钟广播,收到后启动service

package com.osram.jay.com.Andonsystem_New;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AlarmReceive extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //循环启动Service
        Intent i = new Intent(context, AlarmService.class);
        context.startService(i);
    }
}

4.设置省电策略(选择无限制)

 public void setBmd() {
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (!pm.isIgnoringBatteryOptimizations(getPackageName())) {
                Intent intent = new Intent();
                String packageName = getPackageName();
                intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                intent.setData(Uri.parse("package:" + packageName));
                this.startActivity(intent);
            }
        }

    }

5.设置为自启动模式

6.设置最后退出主页面不要finish()关闭

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

      if (keyCode == KeyEvent.KEYCODE_BACK) {
          Intent home = new Intent(Intent.ACTION_MAIN);
          home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
          home.addCategory(Intent.CATEGORY_HOME);
          startActivity(home);
          return true;
      }
      return super.onKeyDown(keyCode, event);
}
Android常驻通知(Notification)是指在用户状态栏中一直显示的通知图标和文本内容,不会因为用户操作或应用进程被销毁而消失。常驻通知通常用于实时监测、后台服务、音乐播放等需要持续提醒用户的场景。 常驻通知的实现步骤如下: 1. 首先,需要创建一个Notification对象,包括通知图标、标题、内容等信息。 2. 然后,创建一个PendingIntent,用于定义用户点击通知后的操作,比如打开应用的某个Activity或执行某个Service。 3. 创建一个NotificationChannel(通知渠道),用于定义通知的重要程度,包括声音、震动等设置。 4. 将Notification对象与PendingIntent关联,并将其设置为常驻通知的优先级。 5. 最后,调用NotificationManager的notify方法,将通知显示在用户的状态栏上。 需要注意的是,常驻通知存在一些使用限制和最佳实践: 1. 用户可以通过设置中的通知管理来关闭或打开特定应用的常驻通知。 2. 常驻通知不适合用于广告或频繁推送的内容,以免打扰用户。 3. 为了避免误导用户,常驻通知的图标和文本内容应与应用的实际情况相符。 4. 如果需要更新通知的内容或操作,可以使用NotificationManager的notify方法进行更新,并保持通知的id不变。 总之,常驻通知是Android提供的一个重要功能,可以实现持续提醒用户和后台监测的需求。但应用开发者需要注意使用场景和用户体验,遵循Android的最佳实践,以确保用户对常驻通知的接受和理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值