本文介绍了电池是因为alarmManager和广播接收机的排放,我认为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我有一个像的AppLock一个应用程序(没有的AppLock),检查当前的应用程序由用户与选定的应用程序列表运行,如果再符合我HV我的code。我有可是没有任何一个循环服务电话Startu preceiver。类(广播接收器),它依次调用CheckRunningApplicationReceiver.Class(广播接收器),它会检查当前活动。我打电话CheckActivity为每0.5秒。我也很多存储,并在里面CheckActivity.Class内部存储检索的字符串。它耗尽我的电池。帮帮我吧。

MyService.class

 公共类的MyService扩展服务{
私有静态最后弦乐TAG =为MyService@覆盖
公众的IBinder onBind(意向为arg0){
    // TODO自动生成方法存根
    返回null;
}
@覆盖
公共无效的onCreate(){}@覆盖
公共无效调用onStart(意向意图,诠释startId){//注意:您可以开始一个新的线程,并用它长期后台处理从这里开始。
}@覆盖
公众诠释onStartCommand(意向意图,诠释标志诠释startId){
    // TODO自动生成方法存根
        getBaseContext()。getApplicationContext()。sendBroadcast(
                新的意图(Startu preceiver_Manual_Start));    返回START_STICKY;}}

Startu preceiver.Class

 公共类Startu preceiver延伸广播接收器{
静态最后弦乐TAG =SR;
最终诠释startupID = 1111111;
@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
    最后AlarmManager alarmManager =(AlarmManager)上下文
            .getSystemService(Context.ALARM_SERVICE);    尝试{            意图I7 =新意图(背景下,CheckRunningApplicationReceiver.class);
               的PendingIntent ServiceManagementIntent = PendingIntent.getBroadcast(背景下,
                    startupID,i7处理器,0);
            alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,
                    SystemClock.elapsedRealtime(),
                    500,ServiceManagementIntent);
        }赶上(例外五){
            Log.i(TAG,异常:+ E);
        }}
      }
    }

}

CheckRunningApplicationReceiver.Class

 公共类CheckRunningApplicationReceiver扩展广播接收器实现Serializable {
@覆盖
公共无效的onReceive(上下文aContext,意图anIntent){    //我在这里做很多事情。
   //我没有使用任何线程在这里(我不知道关于线程)。
   //我在这里检查互联网连接,存储的检索
   // ArrayList中,从这里内部存储字符串,获取当前
   //运行应用程序和ArrayList的检查。
}


  • 下面是我观察到,当我把报警时间为10毫秒的事情,当连接到笔记本电脑我的电话,电话的手机检测后延时15秒发生的,通过蓝牙传输文件,即使,有一个延迟。现在我打电话0.2秒。因此,我不能看到这些问题。请告诉我这样做的原因是什么?

  • 我存储ArrayList和几串在内部存储。我应该使用共享preferences呢?

  • 有没有广播接收器,它告诉我,如果当前运行的应用程序被改变?

  • 我应该使用一个服务里面一个无限循环,而不是使用报警管理器?

  • 如何在手机锁定或手机进入睡眠状态?停止CHeckRunningApp.Class

  • 解决方案电池漏电?


解决方案

There is no way to detect the new application launch (I don't think there's any such Broadcast receiver to support that), you can write a service which would keep on polling to look for running application using Activity Manager, but I don't think that would be efficient. You have to compromise, eith poll a a slow rate or Battery may drain fast.

Please have a look at this project - https://github.com/twinone/AppLocker

这篇关于电池是因为alarmManager和广播接收机的排放,我认为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 04:18