Protéger le service d'être tué (certains modèles ne sont pas disponibles, à mettre à jour)

Protéger le service d'être tué (certains modèles ne sont pas disponibles, à mettre à jour)

Le code détaillé est affiché ici : https://github.com/yzbbanban/Test_Romote
Cette coque prend en charge les modèles de téléphones mobiles suivants (grâce à la plate-forme Tencent Youtest) :
Nokia 6 7.0 est OK
Huawei mate 9 7.0 échoue
Huawei 5.1 est OK
Samsung s6 est OK
oppo R7 plus Oui
Xiaomi est mort
Meizu est mort
Hammer est mort
Sony Z5 6.0 C5 est réussi
Gionee est ok
htc 5.0, 6.0 est ok
Coolpad est
ok moto Z 6.0 est ok
moto x style 5.1 est ok
Nubia 5.1 est ok
LG 6.0 est ok
LeEco mort
vivo 6.0 est
ok Toutes les parties de , à mettre à jour à l'avenir


Il utilise un cadre d'un grand dieu, et il est écrit en détail.L'adresse détaillée : http://blog.csdn.net/marswin89/article/details/50917098

Ce qui suit présente l'utilisation. Après avoir téléchargé le fichier sur github ci-dessus, il y a un module de fichier important : LibMarsdaemon, qui sera utile. Ouvrez android studio et ajoutez : module
Écrivez la description de l'image ici

Écrivez la description de l'image ici
Vous pouvez voir qu'il
Écrivez la description de l'image ici
existe le contenu de la structure du projet :
Écrivez la description de l'image ici
ajoutez-le aux dépendances ci-dessous,
Écrivez la description de l'image ici
ajoutez-le à la bibliothèque d'applications en tant que bibliothèques, puis OK jusqu'au bout. Vous pouvez
Écrivez la description de l'image ici
voir qu'il y a un lib dans l'application.


Commençons la partie code : très simple :
enregistrez d'abord le service qui doit être protégé dans manifest.xml, ainsi que les autres services et récepteurs qui sont invoqués :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="test.ban.com.test_remote">

    <application
        android:name=".MyApplication2"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!--需要守护的service-->
        <service android:name=".Service1" android:process=":process1"/>
        <receiver android:name=".Receiver1" android:process=":process1"/>
        <service android:name=".Service2" android:process=":process2"/>
        <receiver android:name=".Receiver2" android:process=":process2"/>
    </application>

</manifest>

Ensuite, écrivez plusieurs Service1, Service2 et Receiver1, Receiver2 respectivement

package test.ban.com.test_romote;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

/**
 * This Service is Persistent Service. Do some what you want to do here
 *
 * Created by brander on 2017/3/21.
 */
public class Service1 extends Service {
    
    
   @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "onStartCommand: ");
    }

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

    private static final String TAG = "Service1";
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "onStartCommand: ");

        return super.onStartCommand(intent, flags, startId);
    }
}
package com.marswin89.marsdaemon.demo;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

/**
 * DO NOT do anything in this Service!
 *
 * Created by brander on 2017/3/21.
 */
public class Service2 extends Service{
    
    

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

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return Service.START_NOT_STICKY;
    }
}
package com.marswin89.marsdaemon.demo;

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

/**
 * DO NOT do anything in this Receiver!
 *
 * Created by brander on 2017/3/21.
 */
public class Receiver1 extends BroadcastReceiver {
    
    
    @Override
    public void onReceive(Context context, Intent intent) {

    }
}
package com.marswin89.marsdaemon.demo;

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

/**
 * DO NOT do anything in this Receiver!
 *
 * Created by brander on 2017/3/21.
 */
public class Receiver2 extends BroadcastReceiver {
    
    
    @Override
    public void onReceive(Context context, Intent intent) {

    }
}

Complétez les quatre composants, puis enregistrez l'application personnalisée dans le mainfest :

 android:name=".MyApplication"

Voici le code détaillé de MyApplication (peut être copié directement) :

package test.ban.com.test_markdown;

import android.app.Application;
import android.content.Context;

import com.marswin89.marsdaemon.DaemonClient;
import com.marswin89.marsdaemon.DaemonConfigurations;

/**
 * Created by brander on 2017/3/21.
 */
public class MyApplication extends Application {
    
    
    //进程守护
    private DaemonClient mDaemonClient;

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        mDaemonClient = new DaemonClient(createDaemonConfigurations());
        mDaemonClient.onAttachBaseContext(base);
    }

    private DaemonConfigurations createDaemonConfigurations() {
        DaemonConfigurations.DaemonConfiguration configuration1 = new DaemonConfigurations.DaemonConfiguration(
                "test.ban.com.test_markdown:process1",//直接写包名+进程
                Service1.class.getCanonicalName(),
                Receiver1.class.getCanonicalName());
        DaemonConfigurations.DaemonConfiguration configuration2 = new DaemonConfigurations.DaemonConfiguration(
                "test.ban.com.test_markdown:process2",//直接写包名+进程
                Service2.class.getCanonicalName(),
                Receiver2.class.getCanonicalName());
        DaemonConfigurations.DaemonListener listener = new MyDaemonListener();
        //return new DaemonConfigurations(configuration1, configuration2);//listener can be null
        return new DaemonConfigurations(configuration1, configuration2, listener);
    }


    class MyDaemonListener implements DaemonConfigurations.DaemonListener {
        @Override
        public void onPersistentStart(Context context) {
        }

        @Override
        public void onDaemonAssistantStart(Context context) {
        }

        @Override
        public void onWatchDaemonDaed() {
        }
    }
}

Voici comment démarrer le service dans MainActivity :

package test.ban.com.test_markdown;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startService(new Intent(MainActivity.this,Service1.class));
    }
}

Maintenant que la partie process daemon est terminée, vous pouvez désormais écrire l'effet que vous souhaitez dans Service1 :
par exemple, envoyer régulièrement des données :

package test.ban.com.test_markdown;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;

import java.util.Timer;
import java.util.TimerTask;

/**
 * This Service is Persistent Service. Do some what you want to do here.<br/>
 * <p>
 * Created by brander on 2017/3/21.
 */
public class Service1 extends Service {
    
    
    private Timer mTimer;
    private TimerTask mTimerTask;

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    Toast.makeText(Service1.this, "brander", Toast.LENGTH_SHORT).show();
                    break;
            }
            super.handleMessage(msg);
        }
    };

    @Override
    public void onCreate() {
        super.onCreate();
        //TODO do some thing what you want..
        mTimer = new Timer();
        mTimerTask = new TimerTask() {
            @Override
            public void run() {
                mHandler.sendEmptyMessage(1);
            }
        };
        mTimer.schedule(mTimerTask, 1000L, 3000L);//延迟1s后,每隔三秒执行
    }

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

C'est ok, essayez de le tuer (Remarque : Parfois, 6.0 sera tué lorsque l'écran est éteint et que l'alimentation n'est pas branchée, la raison est à analyser)

Je suppose que tu aimes

Origine blog.csdn.net/u013377003/article/details/65631240
conseillé
Classement