如何使Android应用程序始终在后台运行?

时间:2016-01-03 03:42:03

标签: android

我正在使用Android设备。当我打开设置>应用>运行时,屏幕左上角有一个选项可以看到:(1)正在运行的进程(2)缓存的后台进程。我想要运行的应用程序(24×7)不幸地列在(2)缓存的后台进程中,我希望它/它们列在(1)运行进程下(如果可能的话) )。可以吗?或者简而言之,如何让Android应用程序始终在后台运行?

我希望我转达了这个问题:-)

3 个答案:

答案 0 :(得分:47)

您必须在Application类中启动服务才能始终运行它。 如果您这样做,您的服务将始终运行。即使用户从任务管理器终止您的应用程序或强制停止您的应用程序,它也会再次开始运行。

创建服务:

public class YourService extends Service {

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

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // do your jobs here
        return super.onStartCommand(intent, flags, startId);
    }
}

创建一个Application类并启动您的服务:

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        startService(new Intent(this, YourService.class));
    }
}

将“name”属性添加到AndroidManifest.xml的“application”标签中

android:name=".App"

另外,不要忘记在AndroidManifest.xml的“application”标签中添加您的服务

<service android:name=".YourService"/>

并且“manifest”标签中的此权限请求(如果API级别为28或更高):

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

<强>更新

在Android Oreo之后,Google引入了一些背景限制。因此,上述解决方案可能无法正常工作。当用户从任务管理器中杀死您的应用时,Android系统也会终止您的服务。如果要运行始终在后台运行的服务。您必须运行前台服务并显示正在进行的通知。因此,请按照以下方式修改您的服务。

public class YourService extends Service {

    private static final int NOTIF_ID = 1;
    private static final String NOTIF_CHANNEL_ID = "Channel_Id";

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

    @Override
    public int onStartCommand(Intent intent, int flags, int startId){

        // do your jobs here

        startForeground();

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

    private void startForeground() {
        Intent notificationIntent = new Intent(this, MainActivity.class);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                notificationIntent, 0);

        startForeground(NOTIF_ID, new NotificationCompat.Builder(this, 
                NOTIF_CHANNEL_ID) // don't forget create a notification channel first
                .setOngoing(true)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle(getString(R.string.app_name))
                .setContentText("Service is running background")
                .setContentIntent(pendingIntent)
                .build());         
    }
}

答案 1 :(得分:2)

在像我这样的手机上(MIUI Redmi 3)你可以在列表中添加特定的应用程序,当你在任务管理器中终止应用程序时应用程序不会停止(它会停止但它会重新开始)

只需转到设置&gt; PermissionsAutostart

即可

答案 2 :(得分:0)

在mi和vivo中-仅使用上述解决方案是不够的。您还必须告诉用户手动添加权限。 您可以通过在电话设置内打开正确的位置来帮助他们。因手机型号而异。