天天看点

打不死的小强 杀不死的服务 开机自启动服务

 如何让APP随手机开机启动,然后自启动界面或自启动后台服务呢?

那么就要用到强大的广播接收者了。 

还有要怎么防止自己的APP不被应用管理器杀死呢?

那么就要用到强大的服务了,而且还要用到两个服务。

以下Demo代码即可以实现以上两个功能。

先来个步骤吧:

1、 新建一个类并继承于 BroadcastReceiver

2、在清单文件中注册receiver

3、新建一个类并继承于Service 

4、 在清单文件中注册 service

5、再新建一个类并继承于Service 

6、 在清单文件中注册 service  

注意的是: 

两个服务的内容一样,区别只在销毁onDestory方法中启动另一个服务,这也是服务不被杀死的关键。

不说了,看代码。

清单文件

--/AutoOpenApp/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" http://schemas.android.com/apk/res/android"     package="com.devwang.autoopenapp"     android:versionCode="1"     android:versionName="1.0" >

    <uses-sdk         android:minSdkVersion="8"         android:targetSdkVersion="21" />

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

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

                <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>

        <service android:name="com.devwang.autoopenapp.AutoOpenService" >         </service>         <service android:name="com.devwang.autoopenapp.AutoOpenServicer" >         </service>

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

</manifest>

布局文件

--/AutoOpenApp/res/layout/activity_main.xml

 <RelativeLayout xmlns:android=" http://schemas.android.com/apk/res/android"     xmlns:tools=" http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingBottom="@dimen/activity_vertical_margin"     android:paddingLeft="@dimen/activity_horizontal_margin"     android:paddingRight="@dimen/activity_horizontal_margin"     android:paddingTop="@dimen/activity_vertical_margin"     tools:context="com.devwang.autoopenapp.MainActivity" >

    <TextView         android:id="@+id/tv"         android:layout_width="fill_parent"         android:layout_height="fill_parent"         android:gravity="center"         android:textSize="60sp"         android:text="开机自启APP" />

</RelativeLayout>

主界面

--/AutoOpenApp/src/com/devwang/autoopenapp/MainActivity.java

package com.devwang.autoopenapp;

import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView;

public class MainActivity extends Activity {

    @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         TextView text=(TextView) findViewById(R.id.tv);         text.setText("这是一个自动启动的例子!");                  System.out.println("Service oncreate");         Intent i = new Intent(this,AutoOpenService.class);         startService(i);     }

}

广播接收者

-- /AutoOpenApp/src/com/devwang/autoopenapp/BootBroadcastReciver.java

package com.devwang.autoopenapp;

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

//开机启动完成的  广播接受者 在这里启动APP Activity public class BootBroadcastReciver extends BroadcastReceiver { static final String ACTION = "android.intent.action.BOOT_COMPLETED";

@Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if (intent.getAction().equals(ACTION)) { //自启动界面 // Intent i = new Intent(context, MainActivity.class); // i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // context.startActivity(i); //自启动服务 Intent i = new Intent(context, AutoOpenService.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startService(i); } }

}  

两个服务

第一个服务

--/AutoOpenApp/src/com/devwang/autoopenapp/AutoOpenService.java  

package com.devwang.autoopenapp;

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

public class AutoOpenService extends Service {

@Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; }

@Override public void onCreate() { // TODO Auto-generated method stub super.onCreate();

System.out.println("Servicer ondestory"); }

@Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy();

System.out.println("Servicer ondestory"); Intent i = new Intent(this, AutoOpenServicer.class); startService(i); }

}

第二个服务

--/AutoOpenApp/src/com/devwang/autoopenapp/AutoOpenServicer.java package com.devwang.autoopenapp;

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

public class AutoOpenServicer extends Service {

@Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; }

@Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); System.out.println("Service onCreate"); }

//守护进程 在次方法中 本服务会被销毁 此时可以启动新的服务 @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); System.out.println("Service ondestory"); Intent i = new Intent(this,AutoOpenService.class); startService(i); }

}

OK  

 ||

 V

Gif

开机自启动后台服务Gif  

http://bruceanne-gif.stor.sinaapp.com/autoservice.gif

两进程互相守护防被杀死与单进程比较Gif

http://bruceanne-gif.stor.sinaapp.com/doubleservice.gif

Gif

 A

 ||

OK

(源自it黑马的视频教程)