当前位置: 首页 > 知识库问答 >
问题:

电池正在耗尽,我想是因为警报管理器和广播接收器。

云瑞
2023-03-14

嗨,我有一个应用程序,比如应用程序(不是应用程序),它检查当前运行的应用程序与用户选择的应用程序列表,如果匹配,那么我有我的代码。我有一个服务,它没有任何循环调用StartupRec

我的服务.class

public class MyService extends Service{
private static final String TAG = "MyService";

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


@Override
public void onCreate() {      

}

@Override
public void onStart(Intent intent, int startId) {

//Note: You can start a new thread and use it for long background processing from here.
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub      
        getBaseContext().getApplicationContext().sendBroadcast(
                new Intent("StartupReceiver_Manual_Start")); 

    return START_STICKY;

}}

startup接收方。班级

public class StartupReceiver extends BroadcastReceiver {
static final String TAG = "SR";
final int startupID = 1111111;


@Override
public void onReceive(Context context, Intent intent) {
    final AlarmManager alarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);

    try{

            Intent i7 = new Intent(context, CheckRunningApplicationReceiver.class);                        
               PendingIntent ServiceManagementIntent = PendingIntent.getBroadcast(context,
                    startupID, i7, 0);
            alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,
                    SystemClock.elapsedRealtime(), 
                    500, ServiceManagementIntent);


        } catch (Exception e) {
            Log.i(TAG, "Exception : "+e);
        }}
      }  
    }

}

检查正在运行的应用程序接收器。类

 public class CheckRunningApplicationReceiver extends BroadcastReceiver implements Serializable{




@Override
public void onReceive(Context aContext, Intent anIntent) {

    //I do lot of things here . 
   //I am not using any thread here ( i dont know about threads ) .
   //I am checking internet connectivity here , storing an retrieving
   //arraylist , strings from internal storage here , getting current 
   //running app and checking with the arraylist . 
}
    < li >以下是我观察到的情况,当我将闹钟时间设置为10ms时,我的手机在连接到笔记本电脑时,手机的检测在15秒钟后发生延迟,即使通过蓝牙传输文件时,也有延迟。现在我要求0.2秒。所以我观察不到这些问题。这是什么原因呢? < li >我将数组列表和几个字符串存储在内部存储器中。我应该使用共享偏好设置吗? < li >有没有广播接收器告诉我当前运行的应用程序是否已更改? < li >我是否应该在服务中使用无限循环,而不是使用报警管理器? < li >如何停止CHeckRunningApp。当手机被锁定或进入睡眠状态时。 < li >电池耗尽的解决方案?

共有2个答案

章嘉致
2023-03-14

是的,我明白了。每半秒钟,如果你检查互联网连接,打开或关闭,检查当前运行活动,电池不会耗尽。如果在内部存储器中存储或取出,电池会耗尽。现在,我使用共享偏好设置,并且没有电池耗尽。耶!

鲍高扬
2023-03-14

但我需要检查用户何时启动应用程序

没有办法检测新的应用程序启动(我不认为有任何这样的广播接收器支持这一点),你可以编写一个服务,它将保持轮询,以寻找使用活动管理器运行的应用程序,但我不认为这将是有效的。你必须妥协,要么慢一点,要么电池会很快耗尽。

请看一下这个项目 - https://github.com/twinone/AppLocker

 类似资料:
  • 我想在多个特定的日期和时间上创建通知,这些日期和时间存储在数据库中。我可以在正确的日期和时间得到通知,但我后来注意到,我也在第二天随机得到通知。每当我重新启动模拟器时,它们就会出现。 所以,似乎我不能停止报警管理器或广播接收器。我曾尝试向AlarmManager的cancel方法提供pendingIntent,但没有成功。我也使用切换按钮来启用/禁用通知,但没有效果 下面是我的代码。 这是数据库结

  • 我创建了一个应用程序与报警管理器和广播接收器,我想通过字符串从主要活动到公共类MySchduleRecector扩展BroadcastRecector(我有报警管理器里面),然后到公共类MyStartServiceRecector扩展BroadcastRecector传递数据到静态函数......在主活动中,从具有共享首选项的编辑框中保存此变量。但是我不能在接收器内使用共享偏好。我怎么能做到这一点

  • 问题内容: 有人可以解释和之间的确切区别吗? 在什么情况下我们必须使用每个Receiver类? 问题答案: 和之间只有一个区别。 当您收到内部广播方法时, 假设, BroadcastReceiver : 它 不保证 该 CPU将保持清醒 ,如果你启动一些长时间运行的进程。CPU可能会立即回到睡眠状态。 WakefulBroadcastReceiver : 这是 保证 该 CPU将保持清醒 ,直到你

  • 我在项目中使用ApacheTomcat JDBC连接池。我很困惑,因为在重负下,我一直看到以下错误: 我的期望是,使用池,新连接的请求将被保留在队列中,直到连接可用。相反,当池达到容量时,请求似乎会被拒绝。这种行为可以改变吗? 谢谢, 达尔 这是我的池配置:

  • 我目前正在使用SharedReferences跟踪通过AlarmManager启动的BroadcastReceiver中要执行工作的项列表。除了一个特定的场景外,一切都很好。当我触发一个新项目来执行工作时,让它完成工作,然后删除该项目(全部通过SharedReferences编辑),它在应用程序运行时工作得很好。当列表中没有任何内容,我打开任务管理器并终止应用程序时,该项突然出现在Broadcas

  • 我有使用hikari池创建连接池的Spring启动应用程序。我们正在使用postgres sql用于db。当我以低qps命中系统时,请求需要大约200毫秒来执行。当部署一个pod并且qps为15时,事情保持良好状态。但是一旦我将qps增加到20,请求就开始需要大约10秒来处理,连接池变空(java.sql.SQLTransientConntion异常:菲尼克斯-连接不可用,请求在30183毫秒后超