简体   繁体   中英

Android getContext on a background Service

I'm trying to create a Service that runs even when my app is closed. However, I need to use my app Context inside this Service . When the app is running, the service works as well, but when I close the app (onDestroy() was called), the getContext() always returns null .

Service

public class SubscribeService extends Service {

    private Context context;

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

    @Override
    public void onCreate() {
        super.onCreate();
        context = this; //Returns null when service is running on background
        context = MyApp.getContext(); //Also null
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //do stuff using context
    }

MyApp

public class MyApp extends Application {

    private static Context context;

    public static Context getContext() {
        return context.getApplicationContext();
    }

    @Override
    public void onCreate() {
        context = getApplicationContext();
        super.onCreate();
    }
}

Service start from Activity onCreate()

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

How should I use the Context in this scenario?

Edit

Managed to get it to work properly after Onik 's help. I just had to call the MyApp.getContext(); before super.onCreate(); Like so:

@Override
public void onCreate() {
    context = MyApp.getContext();
    super.onCreate();
}

Service extendsContext . You can use this , where this is the reference to the Service instance.

Putting more details on my comment below regarding the following code of SubscribeService class:

@Override
public void onCreate() {
    super.onCreate();
    context = this;
    context = MyApp.getContext();
}

In your Service 's onCreate() context = this cannot be null by a fundamental programming paradigm.

Try this:

Added super.onCreate(); before MyApp.context = getApplicationContext();

public class MyApp extends Application {

    private static Context context;

    public void onCreate() {
        super.onCreate();
        MyApp.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return MyApp.context;
    }
}

Edit: Calling MyApp.getAppContext() will return the application Context .

already once left an answer , which was to use getApplicationContext() in the Service .

also, using an IntentService with Context.startService(Intent) might make sense here.

... and do not insert statements before calling to super.onCreate() .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM