按照你的方法在async task拿不到service
如果您的async task无法获取service,则可以尝试以下方法:
- 在activity或fragment中创建一个全局变量来保存service实例,然后在async task中访问该变量。
例如,在activity中创建一个名为mMyService的变量来保存service实例:
private MyService mMyService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
Intent intent = new Intent(this, MyService.class);
bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
MyService.LocalBinder binder = (MyService.LocalBinder) iBinder;
mMyService = binder.getService();
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
mMyService = null;
}
};
然后,在async task中访问mMyService变量:
public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
private MyService mService;
public MyAsyncTask(MyService service) {
mService = service;
}
@Override
protected Void doInBackground(Void... voids) {
// 使用mService来执行需要在service中完成的任务
return null;
}
}
// 在activity中启动async task
new MyAsyncTask(mMyService).execute();
- 将service的实例传递给async task,可以在async task的构造函数中传递实例。
例如,在activity中启动async task时传递service实例:
public class MyActivity extends AppCompatActivity {
private MyService mMyService;
// ...
private void startMyAsyncTask() {
MyAsyncTask task = new MyAsyncTask(mMyService);
task.execute();
}
}
public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
private MyService mService;
public MyAsyncTask(MyService service) {
mService = service;
}
@Override
protected Void doInBackground(Void... voids) {
// 使用mService来执行需要在service中完成的任务
return null;
}
}
原文地址: https://www.cveoy.top/t/topic/b7v6 著作权归作者所有。请勿转载和采集!