Android-在android中当服务被关闭后如何自动启动?

Android-在android中当服务被关闭后如何自动启动?

清晨说ぺ晚安 发布于 2017-04-06 字数 173 浏览 1261 回复 4

在安装了某应用以后,会发现有一些服务也会随之运行。而且,这些服务每次都会随着手机开机而启动。我想问的是二个问题:
1.如何做成服务
2.如何服务被关闭后自动启动?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

想挽留 2017-10-25 4 楼

把Alarm停止,哈哈,玩笑。

一般android是通过alarm定时或者间隔启动的。

为了即时通信和及时推送的,新浪微波,qq类的程序都有Push后台(轻量级的长连接),可以类似于gtalk的xmpp,能关掉他的软件应该基本都是同样的流氓。
所以不好的软件就卸载就好了。

夜无邪 2017-10-07 3 楼

1.如何开机自动启动?
实现一个BroadcastReceiver,监听手机启动完成的事件ACTION_BOOT_COMPLETED即可。

package test.demoservice;

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

public class BootBroadcast extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent mintent) {

if (Intent.ACTION_BOOT_COMPLETED.equals(mintent.getAction())) {
// 手机启动完成
Intent intent = new Intent(context, DemoService.class);
// 启动service
context.startService(i);
}

}
}

DemoService:

package test.demoservice;

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

public class DemoService extends Service {

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

@Override
public void onCreate() {
super.onCreate();
Log.v("=========", "***** DemoService *****: onCreate");
}

@Override
public void onStart(Intent intent, int startId) {
Log.v("=========", "***** DemoService *****: onStart");
// 这里可以做Service该做的事
}
}

2.如何服务被关闭后自动启动?
在手机启动后不直接启动Service,而是启动一个timer,或者alarmManager,然后每隔一段时间去启动Service。

 package test.demoservice;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;

public class BootBroadcast extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent mintent) {

if (Intent.ACTION_BOOT_COMPLETED.equals(mintent.getAction())) {
// 启动完成
Intent intent = new Intent(context, Alarmreceiver.class);
intent.setAction("alarm.action");
PendingIntent sender = PendingIntent.getBroadcast(context, 0,
intent, 0);
long firstime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);

// 10秒一个周期,不停的发送广播
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,
10 * 1000, sender);
}

}
}

Alarmreceiver:

 package test.demoservice;

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

public class Alarmreceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals("alarm.action")) {
Intent i = new Intent();
i.setClass(context, DemoService.class);
// 启动service
// 多次调用startService并不会启动多个service 而是会多次调用onStart
context.startService(i);
}
}
}

想挽留 2017-08-25 2 楼

可以参照windows上多进程保护病毒的方式,写成两个服务,互相监视对方,一旦检测到另外一方退出,马上启动。

夜无邪 2017-08-01 1 楼

如何kill掉一些自动启动服务,一些不常用的应用吃内存严重啊?

请参考android系统自带应用管理,源代码路径如下:
packages/apps/Settings/src/com/android/settings/InstalledAppDetails.java
从中可以了解如何停止一个activity或者service.