uni-app 安卓双进程应用保活 避免系统干掉进程 一加手机无法保活

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app 安卓双进程应用保活 避免系统干掉进程 一加手机无法保活

3 回复

大佬,解决了么,同样得问题


已经更新,可以再试试,有人反馈没问题了

在开发uni-app应用时,对于安卓双进程应用保活的需求,尤其是针对特定品牌如一加手机可能出现的保活问题,可以通过多种技术手段来尝试解决。不过需要注意的是,安卓系统出于性能和电池续航的考虑,会积极管理后台进程,因此完全避免进程被杀掉是不可能的。但我们可以通过一些策略来提高应用的存活率。

以下是一个利用AndroidManifest.xml配置和Service结合BroadcastReceiver的示例,以增加应用保活的概率。请注意,这仅是一个示例,并非保证在所有设备和所有Android版本上都能有效。

1. 修改AndroidManifest.xml

首先,在AndroidManifest.xml中声明一个前台服务和一个BroadcastReceiver,用于在系统事件(如屏幕解锁、电量变化等)时重新启动服务。

<service
    android:name=".MyForegroundService"
    android:foregroundServiceType="location"
    android:exported="false"/>

<receiver android:name=".BootCompletedReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

2. 创建前台服务MyForegroundService

public class MyForegroundService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Notification notification = new Notification.Builder(this, "CHANNEL_ID")
                .setContentTitle("My Service")
                .setContentText("Running")
                .setSmallIcon(R.drawable.ic_service)
                .build();
        startForeground(1, notification);
        return START_STICKY;
    }

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

3. 创建BootCompletedReceiver

public class BootCompletedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Intent serviceIntent = new Intent(context, MyForegroundService.class);
            context.startService(serviceIntent);
        }
    }
}

4. 在uni-app中调用服务

在uni-app中,你可以通过plus.android.importClass等API调用原生Android代码来启动这个服务。不过,这通常需要在HBuilderX中配置原生插件或者通过自定义基座实现。

注意事项

  • 前台服务:前台服务虽然能提高存活率,但需要显示通知给用户,可能会影响用户体验。
  • 电池优化:部分手机(如一加)有电池优化功能,可能会限制后台活动。用户需要手动将应用加入白名单。
  • 权限问题:确保应用有必要的权限,如RECEIVE_BOOT_COMPLETED

通过上述方法,可以在一定程度上提高应用在安卓设备上的存活率,但并不能完全避免被杀。对于特定品牌手机的问题,可能需要针对该品牌做进一步的适配和测试。

回到顶部