Android O(8)以上应用保活看这篇文章就够了-最简单而又免费的保活方法

图片为证


图1 程序自动拉活
图2 打不开的进程页面

保活思路


       传统的套路咱就不再累赘(详情可看这里),这里分享一个流氓做法,具体看下面代码。

	private static android.os.Handler handler = new android.os.Handler(Looper.getMainLooper());
	/**
     * 返回主页
     *
     * @param context
     * @param delay
     */
    public static void perforGlobalHome(final Context context, long delay) {
        Intent home = new Intent(Intent.ACTION_MAIN);
        home.addCategory(Intent.CATEGORY_HOME);
        home.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(home);

        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent home = new Intent(Intent.ACTION_MAIN);
                home.addCategory(Intent.CATEGORY_HOME);
                home.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(home);
            }
        }, delay);
    }

       很多大佬看到这里可能就不耐烦了,这不就是通过代码拉回主页嘛,跟保活有毛关系。

       不着急,再配上一个广播监听基本就实现杀不死了,具体看代码。

public class BroadcastReceiver extends android.content.BroadcastReceiver {
    private final String TAG = BroadcastReceiver.class.getSimpleName();

    @Override
    public void onReceive(final Context context, Intent intent) {
        // TODO Auto-generated method stub
        Log.e(TAG, "接收到广播:" + intent.getAction());
        
        if (intent.getAction() == Intent.ACTION_CLOSE_SYSTEM_DIALOGS) {
            perforGlobalHome(context, 500);
        }
     }
}

       到这里就很多大佬应该能看出来了,实际上就是监听ACTION_CLOSE_SYSTEM_DIALOGS,当触发时直接通过代码拉回桌面,这样用户打不开进程页面自然就杀不死程序进程了。

       哦,别忘了注册广播,详情看下面代码。

 IntentFilter filter = new IntentFilter();
 filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);//home
 registerReceiver(new BroadcastReceiver(), filter);

       简单而又粗暴,无需任何权限即可实现应用保活,妈妈再也不用担心我Android O(8)到Android Q(10)无法实现应用保活的问题了。

拉活权限


       当然了,高标准需求的小伙伴都应该知道,接下来才是正菜,仅仅防止用户手动杀掉进程还是远远不够的,我们并不能排除应用被系统干掉的可能性。

       那么我们又是如何来解决这个问题呢?详情请看下面具体代码。

public class MyAccessibilityService extends AccessibilityService {
    private String TAG = MyAccessibilityService.class.getSimpleName();
    protected void onServiceConnected() {
        super.onServiceConnected();       
    }

    @Override
    protected boolean onKeyEvent(KeyEvent event) {
        return false;
    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
    	//在这里重新拉活自己的程序即可
    }
    
	@Override
    public void onInterrupt() {
    }

    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
    }
}

       不要忘了在AndroidManifest中注册服务完成配置具体看下面代码。

		<service
            android:name=".servise.MyAccessibilityService"
            android:label="@string/app_name"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>
            <meta-data
                android:name="android.accessibilityservice"
                android:resource="@xml/accessibility_service_config" />
        </service>

       当然了,还有xml下的配置文件,具体看代码。

	<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeWindowStateChanged"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagIncludeNotImportantViews"/>

完整代码


gitee:https://gitee.com/yunianvh/employee-management-android
github:https://github.com/Life1412378121/Android-2020-APP-

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉念聿辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值