Я пытаюсь получить имя приложения, когда оно попадает на передний план. Я выполнил это, запустив фоновый сервис, в котором я реализовал Runnable для запуска этой службы каждую секунду. Это нормально работает во всех ОС, кроме Jelly Bean. Моя служба убита. Я знаю, что если приложение потребляет больше оперативной памяти, оно убивает доступные фоновые службы для управления необходимым пространством. Например, игры с высоким разрешением. Но я потеряю данные. Я реализовал Foreground Services. Его работа прекрасна. Я сомневаюсь, делает ли этот эффект каким-либо образом в вопросе эффективности или потребления батареи? Есть ли другой метод, кроме переднего плана?Сервис убит в Jelly Bean
Это сервис, который я сделал на переднем плане.
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
ReceiverRunning = true;
context = this;
Intent intent1 = new Intent(this, ComponentSelector.class);
PendingIntent pendingIndent = PendingIntent.getActivity(this, 1, intent1, 0);
Notification mNotification = new Notification(R.drawable.ic_launcher, "BackgroundApp", System.currentTimeMillis());
mNotification.setLatestEventInfo(this, "BatteryUSage", "Click to open to app", pendingIndent);
mNotification.flags = mNotification.flags|Notification.FLAG_ONGOING_EVENT;
startForeground(1000, mNotification);
// Start service if not started.
if (!ForegroundApp.isRunning == true) {
context.startService(new Intent(context, Brightness.class));
}
boolean has_tele = getPackageManager().hasSystemFeature(
PackageManager.FEATURE_TELEPHONY);
if (has_tele == true) {
TelephonyManager teleman = (TelephonyManager) getBaseContext()
.getSystemService(Context.TELEPHONY_SERVICE);
if (teleman != null)
deviceId = teleman.getDeviceId();
}
uId = deviceInfo();
try {
NetworkInfo info = (NetworkInfo) ((ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if (info != null) {
Log.d("wifiRun", "Network available");
ConnectivityManager conMan = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo.State wifi = null;
if (conMan.getNetworkInfo(1).isAvailable())
wifi = conMan.getNetworkInfo(1).getState();
if (wifi == NetworkInfo.State.CONNECTED
|| wifi == NetworkInfo.State.CONNECTING) {
wifiCheck = true;
context.startService(new Intent(context, WiFi.class));
Log.d("wifiRun","wifiCheck: " +wifiCheck);
} else {
Log.d("wifiRun","wifiCheck: " +wifiCheck);
}
}
} catch (Exception e) {
e.printStackTrace();
}
// Register for Screen On and Screen Off.
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
sReceiver = new ServiceDefinition();
registerReceiver(sReceiver, intentFilter);
//return super.onStartCommand(intent, flags, startId);
return START_STICKY;
}
Вот оно, я отправил код. Пожалуйста, проверьте это. – madhu
Почему вы запускаете 2 дополнительных услуги в своем основном сервисе? Все ли они на переднем плане? – Dimmerg
Эти 2 дополнительных услуги не являются приоритетными. Именно здесь я получаю подробные сведения о деятельности переднего плана. – madhu