Start Service in Android

Start service in Android

Probably you don't have the service in your manifest, or it does not have an <intent-filter> that matches your action. Examining LogCat (via adb logcat, DDMS, or the DDMS perspective in Eclipse) should turn up some warnings that may help.

More likely, you should start the service via:

startService(new Intent(this, UpdaterServiceManager.class));

How to start a service from an activity in android?

If you can start your service then use

public class YourService extends Service {

public static boolean isRunning = false;

@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
isRunning = true;
return START_STICKY;
}
}

if(!YourService.isRunning){
Intent intent = new Intent(this, YourService.class);
startService(intent);

Date date = new Date(System.currentTimeMillis());
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date dt = new Date(System.currentTimeMillis());
String strTime = sdf.format(dt);
String strDate = dateFormat.format(date);
}

and also define

<service android:name="com.mypackagename.YourService"></service>

in manifest.

If you want check service running or not then use one static variable in service and check before start your service. If that false then start service.

Starting service from another service

Instead of using getApplicationContext() you should use Service1.this or getBaseContext() . Have you declared your Service2 in the AndroidManifest?

How to start a Service when the Android application is started?

How to start a Started Service together with the first activity of the Application?

Call startService(intent) in the onCreate() method of the first Activity.

I have a background service. I want its life cycle to be independent of the application activities.

The best way to do that is to create a PendingIntent for a Service and register it with the AlarmManager:

Intent i = new Intent(this, LocationService.class);
PendingIntent pi = PendingIntent.getService(this, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP,0,60*60*1000, pi); /* start Service every hour. */

This will ensure that the Service is periodically started at regular intervals, independent of whether the user has brought the app to the foreground or not.

How to start a Service when the Android application is started?

You can start the Service automatically on application start by extending the Application class:

public class MyApp extends Application {

@Override
public void onCreate() {
super.onCreate();
startService(new Intent(this, NetworkService.class));
}

}

and modify the application tag in your manifest with

<application 
android:icon="@drawable/icon"
android:label="@string/app_name"
android:name="com.mycompanydomain.MyApp">

This works because the Application class is one of the first entities to be created when an app launches. This will start the Service irrespective of what the launch Activity is.

Start context.startService(intent) on Android Pie

I faced the same Problem with a small Service which i didn't want to change to a ForegroundService. Then i found this workaround provided by Google for starting services in onResume:

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
if (runningAppProcesses != null) {
int importance = runningAppProcesses.get(0).importance;
// higher importance has lower number (?)
if (importance <= ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
//start your service the same way you did before in here
startService(serviceIntent);
}
}

The issue has been addressed in future Android release.

There is a workaround to avoid application crash. Applications can get
the process state in Activity.onResume() by calling
ActivityManager.getRunningAppProcesses() and avoid starting Service if
the importance level is lower than
ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND. If the
device hasn’t fully awake, activities would be paused immediately and
eventually be resumed again after its fully awake.

start service multiple times with different intents

You don't run them in Parallel. The Android API handles this for you. If the service isn't running the first time you call startService(), then its onCreate() method is called. However, if it is running, then that results in a call to the service's onStartCommand().

Multiple requests to start the service result in multiple corresponding calls to the service's onStartCommand().

It's up to you to handle the logic to create a thread for each request to run that service. Take a look at this overview of how to accomplish your task:

http://developer.android.com/intl/es/guide/components/services.html#ExtendingService

That will walk you through creating your service correctly, allowing you to send multiple requests simultaneously.

Start a Service from an Activity

The application can start the service with the help of the Context.startService method. The method will call the onCreate method of the service if service is not already created; else onStart method will be called. Here is the code:

Intent serviceIntent = new Intent();
serviceIntent.setAction("com.testApp.service.MY_SERVICE");
startService(serviceIntent);


Related Topics



Leave a reply



Submit