Cannot keep android service alive after app is closed
Here is an example of foreground service that I use and that works, it remains active when the app is closed. Of course, it also must be started, and for that task the app must be running at a first glance, or a receiver of a boot event must be set, but this is another story.
public class MyService extends Service {
static final int NOTIFICATION_ID = 543;
public static boolean isServiceRunning = false;
@Override
public void onCreate() {
super.onCreate();
startServiceWithNotification();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null && intent.getAction().equals(C.ACTION_START_SERVICE)) {
startServiceWithNotification();
}
else stopMyService();
return START_STICKY;
}
// In case the service is deleted or crashes some how
@Override
public void onDestroy() {
isServiceRunning = false;
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
// Used only in case of bound services.
return null;
}
void startServiceWithNotification() {
if (isServiceRunning) return;
isServiceRunning = true;
Intent notificationIntent = new Intent(getApplicationContext(), MyActivity.class);
notificationIntent.setAction(C.ACTION_MAIN); // A string containing the action name
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent contentPendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.my_icon);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle(getResources().getString(R.string.app_name))
.setTicker(getResources().getString(R.string.app_name))
.setContentText(getResources().getString(R.string.my_string))
.setSmallIcon(R.drawable.my_icon)
.setLargeIcon(Bitmap.createScaledBitmap(icon, 128, 128, false))
.setContentIntent(contentPendingIntent)
.setOngoing(true)
// .setDeleteIntent(contentPendingIntent) // if needed
.build();
notification.flags = notification.flags | Notification.FLAG_NO_CLEAR; // NO_CLEAR makes the notification stay when the user performs a "delete all" command
startForeground(NOTIFICATION_ID, notification);
}
void stopMyService() {
stopForeground(true);
stopSelf();
isServiceRunning = false;
}
}
Then I run it with
Intent startIntent = new Intent(getApplicationContext(), MyService.class);
startIntent.setAction(C.ACTION_START_SERVICE);
startService(startIntent);
Please note the two constants used as Actions, these are Strings that must start with the package name.
How can i keep background android services running when app killed or closed
You can't, not on modern versions of Android. You can make a foreground service which is the least likely thing to be killed (outside of the foreground app), but you can't count on it not being killed. Instead write your code so that it doesn't need to- mainly by using WorkManager for triggered background work. Unless you're writing a server, in which case I'd say that you should use another OS, Android isn't suitable.
For messages from a server like you mentioned, I'd use FCM push messaging rather than a long lived direct server connection.
Android Service required to run in background until the app is killed
You can use a bound Service
. The Service
will stop after all the bound clients disconnect. Your Activity
binds to the Service
and when your Activity
is killed or finished, you unbind and the Service
stops. If Android kills off the Activity
, the bound connection is also shut down and your Service
will stop.
Related Topics
How to Verify Purchase for Android App in Server Side (Google Play in App Billing V3)
Prevent Screen Rotation on Android
I Get Fragment Not Attached to a Context. What Context Need to Use
Import Android.Support.V7.App Cannot Be Resolved
Recyclerview Indicates That Reaches the Last Item
How to Receive Fcm Push Notifications When App Is Killed
How to Show Only Specific Part of Website in Android Webview
Getting the Current Fragment Instance in the Viewpager
Chrome on Android Resizes Font
Allow User to Select Camera or Gallery For Image
How to Check If Data Is Inserted in Room Database
How to Figure Out Which Sim Received Sms in Dual Sim Android Device
Download Manager Progress Not Visible in the Notification Area
How to Reduce an Image File Size Before Uploading to a Server
Android Q, Programmatically Connect to Different Wifi Ap for Internet
Android Application Icon Not Showing Up
How to Automatically Open App When Receive Push Notification