获取服务调用的线程中的上下文

nol*_*man 2 service multithreading android location android-context

我有以下代码:

public class DumpLocationLog extends Thread {
    LocationManager lm;
    LocationHelper loc;
    public void onCreate() {
        loc = new LocationHelper();
        lm = (LocationManager) Context.getSystemService(Context.LOCATION_SERVICE);
    }
    public void run() {
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, loc);
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望它从远程服务运行,但在行中lm = (LocationManager) Context.getSystemService(Context.LOCATION_SERVICE);我得到一个NullPointerException错误,因为它context是null.

我怎样才能获得上下文?getBaseContext()getApplicationContext()不起作用.

ant*_*nyt 7

A 默认Thread不会直接访问a Context; 你必须传入它.一个线程也不需要一个onCreate方法(我猜你是手动调用) - 我只是将它改为构造函数.你可以在Thread的构造函数中传入一个Context:

public class DumpLocationLog extends Thread {
    LocationManager lm;
    LocationHelper loc;
    public DumpLocationLog(Context context) {
        loc = new LocationHelper();
        lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    }
    public void run() {
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, loc);
    }
}
Run Code Online (Sandbox Code Playgroud)

new DumpLocationLog(this);如果从内部使用Service(如果Service是Context的子类,那么this可以在这里工作),你可以实例化它.您可以通过调用该start()方法来启动该线程.