android - BroadcastReceiver 在模拟器上工作但不在我的设备上
问题描述
我遇到了一个非常奇怪的问题,广播接收器不在我自己的设备上工作,而是在 android 模拟器上工作。每次调用 onDestroy 方法时,我的应用程序通过调用广播接收器来重新启动服务。我什至尝试查看我设备上的开发人员选项,看看是否激活了一些限制,例如“不保留活动”,但未选中。
xml文件
<service
android:name="oak.shef.ac.uk.testrunningservicesbackgroundrelaunched.SensorService"
android:enabled="true">
</service>
<receiver
android:name="oak.shef.ac.uk.testrunningservicesbackgroundrelaunched.SensorRestarterBroadcastReceiver"
android:enabled="true"
android:exported="true"
android:label="RestartServiceWhenStopped"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="SensorRestarterBroadcastReceiver" />
</intent-filter>
</receiver>
服务
public class SensorService extends Service {
private Timer timer;
MyThread myThread;
private TimerTask timerTask;
public int counter=0;
public SensorService(Context applicationContext) {
super();
Log.i("HERE", "here I am!");
}
public SensorService() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
myThread = new MyThread();
myThread.start();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("EXIT", "ondestroy!");
Intent restartService = new Intent("SensorRestarterBroadcastReceiver");
sendBroadcast(restartService);
timer.cancel();
myThread.interrupt();
}
public class MyThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
try {
int delay = 10000; // delay for 10 sec.
int period = 10000; // repeat every 10 sec.
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
Log.i("in timer", "in timer ++++ "+ (counter++));
}
}, delay, period);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
广播接收器
public class SensorRestarterBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(SensorRestarterBroadcastReceiver.class.getSimpleName(),
"Restarting Service");
context.startService(new Intent(context, SensorService.class));;
}
}
解决方案
推荐阅读
- sql-server - 如何测试 SQL Server Profiler 的跟踪?
- sqlite - 如何在 Delphi FireDAC SQLite 中将 blob 保存到文件中
- reactjs - 如何使用 ButtonGroup 和 Button 创建动态单选按钮 - REACTSTRAP
- visual-studio-code - 在 vscode-python 中进行事后调试?
- amazon-web-services - 嵌套 CloudFormation 堆栈回滚
- gitlab - 你如何从 gitlab-ci.yml 中的键盘输入
- python-3.x - 有没有办法提高计数功能的代码效率?
- reactjs - 反应原生无效的钩子调用
- python - 无论用户输入如何,Python D&D 掷骰子程序都只掷 D20?
- node.js - Firebase 功能与使用类似缓存的东西的 firestore