找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2208|回复: 0
打印 上一主题 下一主题
收起左侧

Android中“不要脸”的Service

[复制链接]
跳转到指定楼层
楼主
ID:90014 发表于 2015-9-14 13:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     Service作为Android中的四大组件之一,经常用他处理一些持续性的、不需要UI的事件。现如今大多数程序都会有一个或多个不要脸的Service,所谓不要脸就是你刚刚强制关闭他,没几秒他又屁颠屁颠的自己活过来了。。。对于这种Kill不掉的Service让人恼怒。因为他又费电又费流量。但是他也有自己的好处、确保一些时时提醒或是其他的功能。

    制作一个简单的“不要脸”的Service有两种思路。其实都差不多的了。。。(参照的是CSDN大神以及其他人的源

    1、利用系统广播(如开机、屏幕唤醒)触发自己的Server或其他你想干的事情。
    2、利用定时任务每隔短时间触发启动事件

    先说第一种:
    首先要创建一个广播监听(继承BroadcastReceiver基类),在onReceive方法中启动(我以Server为例)
       @Overridepublic void onReceive(Context context, Intent intent)
{
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction()))
{
Intent startServiceIntent = new Intent(context, MyService.class);
startServiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startService(startServiceIntent);
}
}
         当然也可以判断接收到的广播类型并作出相应的相应,如下:
                if (Intent.ACTION_BOOT_COMPLETED.equals(arg1.getAction())) {
System.out.println("手机开机了...bootComplete!");
} else if (Intent.ACTION_PACKAGE_ADDED.equals(arg1.getAction())) {
System.out.println("新安装了应用程序....pakageAdded!");
} else if (Intent.ACTION_PACKAGE_REMOVED.equals(arg1.getAction())) {
System.out.println("应用程序被卸载了....pakageRemoved!");
} else if (Intent.ACTION_USER_PRESENT.equals(arg1.getAction())) {
System.out.println("手机被唤醒了.....userPresent");
}
     其次在清单文件(AndroidManifest.xml)中注册广播
        <receiver android:>
            <intent-filter>
                <action android: />
                <category android: />
            </intent-filter>
        </receiver>

    然后说第二种 :定时启动服务,这个需要用到
AlarmManager与PendingIntent,这两个定时任务类。即使是当前Activity被杀死了也是可以执行的。
    当Server第一次启动的时候会触发onCreate,故在此方法中写定时触发Server就可以了
        
AlarmManager mAlarmManager = null;
        PendingIntent mPendingIntent = null;


@Override
public void onCreate()
{
//start the service through alarm repeatly
        Intent intent = new Intent(getApplicationContext(), MyService.class);        
mAlarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
mPendingIntent = PendingIntent.getService(this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
long now = System.currentTimeMillis();
                // 60S后启动Intent

mAlarmManager.setInexactRepeating(AlarmManager.RTC, now, 6000, mPendingIntent);

super.onCreate();
}




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表