Hoe maak je een Android-app die altijd op de achtergrond draait?

Ik gebruik een Android-apparaat. Wanneer ik de Instellingen> Apps> In werking, er is een optie linksboven in het scherm om te zien: (1) Lopende processen (2) Gecachte achtergrondprocessen. En de app(s) die ik altijd wilde laten draaien (24×7) staat/staan ​​helaas vermeld onder (2) Achtergrondprocessen in cache, waarvan ik wilde dat ze vermeld zouden worden onder (1) Lopende processen (indien mogelijk ). Kan het? Of kortom, hoe zorg je ervoor dat een Android-app altijd op de achtergrond draait?

Ik hoop dat ik de vraag heb overgebracht 🙂


Antwoord 1, autoriteit 100%

U moet een service starten in uw Application-klasse om deze altijd uit te voeren.
Als u dat doet, blijft uw service altijd actief. Ook al beëindigt de gebruiker uw app vanuit Taakbeheer of geforceerde stopzetting van uw app, hij zal opnieuw beginnen te werken.

Maak een dienst:

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);
    }
}

Maak een toepassingsklasse en start uw service:

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        startService(new Intent(this, YourService.class));
    }
}

Voeg het kenmerk ‘name’ toe aan de tag ‘application’ van uw AndroidManifest.xml

android:name=".App"

Vergeet ook niet om uw service toe te voegen aan de “application”-tag van uw AndroidManifest.xml

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

En ook dit toestemmingsverzoek in de “manifest”-tag (indien API-niveau 28 of hoger):

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

UPDATE

Na Android Oreo heeft Google enkele achtergrondbeperkingen geïntroduceerd. Daarom zal deze bovenstaande oplossing waarschijnlijk niet werken. Wanneer een gebruiker uw app vanuit Taakbeheer doodt, zal Android System uw service ook doden. Als u een service wilt uitvoeren die altijd op de achtergrond actief is. U moet een voorgrondservice uitvoeren met een doorlopende melding. Bewerk uw service dus zoals hieronder.

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());         
    }
}

BEWERK: BEPERKTE OEM’S

Helaas beperken sommige OEM’s (Xiaomi, OnePlus, Samsung, Huawei enz.) achtergrondbewerkingen vanwege een langere levensduur van de batterij. Er is geen goede oplossing voor deze OEM’s. Gebruikers moeten een aantal speciale machtigingen toestaan ​​die specifiek zijn voor OEM’s of ze moeten uw app toevoegen aan de app-lijst op de witte lijst op apparaatinstellingen. U kunt meer gedetailleerde informatie vinden op https://dontkillmyapp.com/.

Als bewerkingen op de achtergrond een verplichting voor u zijn, moet u uw gebruikers uitleggen waarom uw functie niet werkt en hoe zij uw functie kunnen inschakelen door die machtigingen toe te staan. Ik raad je aan om de AutoStarter-bibliotheek (https://github.com/judemanutd/AutoStarter) te gebruiken om stuur uw gebruikers met betrekking tot de machtigingenpagina eenvoudig om vanuit uw app.

Trouwens, als u wat periodiek werk moet doen in plaats van continu op de achtergrond te werken. Je kunt beter een kijkje nemen in WorkManager (https://developer.android.com/topic/libraries/ architectuur/werkmanager)


Antwoord 2, autoriteit 2%

Op sommige mobiele telefoons zoals de mijne (MIUI Redmi 3) kun je gewoon een specifieke applicatie toevoegen aan de lijst waar de applicatie niet stopt wanneer je applicaties beëindigt in Taakbeheer (het stopt maar het begint opnieuw)

Ga gewoon naar Instellingen>PermissionsAutostart


Antwoord 3

In mi en vivo – Het gebruik van de bovenstaande oplossing is niet voldoende. U moet ookde gebruiker vertellen om handmatig toestemming toe te voegen.
Je kunt ze helpen door de juiste locatie in de telefooninstellingen te openen. Varieert voor verschillende telefoonmodellen.

Other episodes