为什么广播接收器不能在服务内部连续工作
why Broadcast receiver is not working continuously inside service
在我的应用程序 运行 之前,我的广播接收器在服务中正常工作,但如果我关闭我的应用程序,它会立即停止工作。
在这里,我希望我的应用程序检测互联网变化并每次都显示 Toast,但 Toast 消息会一直显示到我的应用程序运行为止。
我已经在 MainActivity 中启动了我的服务,并在我的服务中定义了我的广播。
MainActivity 中的 onCreate 内部-
Intent service = new Intent(MainActivity.this, LatestCallService.class);
startService(service);
服务内的 BroadcastReceiver:
BroadcastReceiver br = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Inside", Toast.LENGTH_SHORT).show();
}
}
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
_mContext = getApplicationContext();
_mContext.registerReceiver(br, filter);
请告诉我我的代码有什么问题。
术语“关闭我的应用程序”不是一个精确的陈述。但我猜你的意思是你在最近的任务列表屏幕中将你的应用程序滑动到 right/left。
一旦onReceive()returns,如果你在前台没有activity并且你没有运行ning服务,你的进程重要性会下降到什么
Android document 称之为 "cached process"。 Android 系统会随时终止这些进程。一旦您的进程终止,您的 BroadCast 接收器也将无法工作。
好的,如果关闭应用程序不是我所说的意思,那么当您在“设置”中转到应用程序屏幕并单击 强制停止 按钮时,您可能是指我说的意思。因此,一旦您的应用程序被强制停止,您的应用程序将永远 运行,直到用户或其他应用程序启动器启动您的应用程序!
********
更新解决方案:
您可以在 .
中找到解决问题的方法
我已经更改了我的代码。我已经启动了前台服务,之后我的代码可以正常工作,广播接收器甚至在关闭应用程序后也可以正常工作。
主要的前台服务 Activity-
Intent serviceIntent = new Intent(this, LatestCallService.class);
serviceIntent.putExtra("inputExtra", "Foreground Service");
ContextCompat.startForegroundService(this, serviceIntent);
Android 清单文件-
uses-permission android:name="android.permission.FOREGROUND_SERVICE"
这样您就可以查看您的服务是否在后台运行。
希望有帮助! :)
在我的应用程序 运行 之前,我的广播接收器在服务中正常工作,但如果我关闭我的应用程序,它会立即停止工作。
在这里,我希望我的应用程序检测互联网变化并每次都显示 Toast,但 Toast 消息会一直显示到我的应用程序运行为止。
我已经在 MainActivity 中启动了我的服务,并在我的服务中定义了我的广播。
MainActivity 中的 onCreate 内部-
Intent service = new Intent(MainActivity.this, LatestCallService.class);
startService(service);
服务内的 BroadcastReceiver:
BroadcastReceiver br = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Inside", Toast.LENGTH_SHORT).show();
}
}
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
_mContext = getApplicationContext();
_mContext.registerReceiver(br, filter);
请告诉我我的代码有什么问题。
术语“关闭我的应用程序”不是一个精确的陈述。但我猜你的意思是你在最近的任务列表屏幕中将你的应用程序滑动到 right/left。
一旦onReceive()returns,如果你在前台没有activity并且你没有运行ning服务,你的进程重要性会下降到什么 Android document 称之为 "cached process"。 Android 系统会随时终止这些进程。一旦您的进程终止,您的 BroadCast 接收器也将无法工作。
好的,如果关闭应用程序不是我所说的意思,那么当您在“设置”中转到应用程序屏幕并单击 强制停止 按钮时,您可能是指我说的意思。因此,一旦您的应用程序被强制停止,您的应用程序将永远 运行,直到用户或其他应用程序启动器启动您的应用程序!
********
更新解决方案:
您可以在
我已经更改了我的代码。我已经启动了前台服务,之后我的代码可以正常工作,广播接收器甚至在关闭应用程序后也可以正常工作。
主要的前台服务 Activity-
Intent serviceIntent = new Intent(this, LatestCallService.class);
serviceIntent.putExtra("inputExtra", "Foreground Service");
ContextCompat.startForegroundService(this, serviceIntent);
Android 清单文件-
uses-permission android:name="android.permission.FOREGROUND_SERVICE"
这样您就可以查看您的服务是否在后台运行。 希望有帮助! :)