我正在开发一个应用程序,它从网络中获取数据并将其写回网络。为此,我使用了AsyncTask,但是这些请求没有得到优化,所以我必须对每个请求进行用户身份验证。现在,我希望使用Service来保存到后端的连接,并在不需要对每个请求进行用户身份验证的情况下执行请求。
在不创建新实例和取消服务所需的所有值的情况下,我很难将此服务对象发送到子活动。那么,在没有osing值的情况下,如何做到这一点呢?
这是我的服务:
public class LasteMVService extends Service {
private ArrayList<WorkSheet> workSheetArrayList;
private SpreadSheet selectedSpeadSheet;
private static String LOG_TAG = "LasteMVService";
private IBinder mBinder = new MyBinder();
@Override
public void onCreate() {
super.onCreate();
new Thread(new Task()).start();
Log.v(LOG_TAG, "in onCreate");
}
@Override
public IBinder onBind(Intent intent) {
Log.v(LOG_TAG, "in onBind");
return mBinder;
}
@Override
public void onRebind(Intent intent) {
Log.v(LOG_TAG, "in onRebind");
super.onRebind(intent);
}
public SpreadSheet getSelectedSpeadSheet() {
return selectedSpeadSheet;
}
public ArrayList<WorkSheet> getWorkSheetArrayList() {
return workSheetArrayList;
}
@Override
public void onDestroy() {
Log.v(LOG_TAG, "in onDestroy");
super.onDestroy();
}
public class MyBinder extends Binder {
public LasteMVService getService() {
return LasteMVService.this;
}
}
class Task implements Runnable {
@Override
public void run() {
synchronized (this){
AndroidAuthenticator androidAuthenticator = new AndroidAuthenticator(getApplicationContext());
SpreadSheetFactory spf = SpreadSheetFactory.getInstance(androidAuthenticator);
ArrayList<SpreadSheet> sheets = spf.getSpreadSheet("Stardiprotokoll", true);
if (sheets != null) {
final SpreadSheet spreadSheet = sheets.get(0);
selectedSpeadSheet = spreadSheet;
ArrayList<WorkSheet> workSheet = spreadSheet.getAllWorkSheets();
workSheetArrayList = workSheet;
}
}
}
}
}下面是我将其与BaseActivity绑定的地方:
public class BaseActivity extends AppCompatActivity {
protected LasteMVService lasteMVService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lasteMVService = ((LasteMVApplication) getApplicationContext()).getLasteMVService();
if(lasteMVService == null){
((LasteMVApplication) getApplicationContext()).initApp();
lasteMVService = ((LasteMVApplication) getApplicationContext()).getLasteMVService();
Util.restartApp(this, true);
}
}
@Override
protected void onStart() {
super.onStart();
Intent intent = new Intent(BaseActivity.this,LasteMVService.class);
startService(intent);
bindService(intent,serviceConnection,BIND_AUTO_CREATE);
}
protected ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
LasteMVService.MyBinder myBinder = (LasteMVService.MyBinder) service;
lasteMVService = myBinder.getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};我的问题是如何在BaseActivity的某些子活动中获得服务的同一个实例?
发布于 2015-08-15 15:19:00
好的,您需要一个服务对象,从基本活动中获取对象的引用,而不是创建一个可以在整个应用程序中全局访问的单例类。下面是帮助您的源代码
public class Common extends Application {
private Service mService; //Service Object from your class that extends service.
private Context mContext;
public Service getService(){
return mService;
}
public void setService(Service service){
mService = service;
}
@Override
public void onCreate() {
super.onCreate();
//Gets the context associated with the whole application
mContext = getApplicationContext();
}
}
public class Service extends Service{
private Common mApp;
private Context mContext;
//Instantiate the Common Object from the singleton class within on create.
@Override
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
mApp = (Common) getApplicationContext();
mApp.setService(this);
}
}
//Now to use it in your base Activity
public class BaseActivity extends AppCompatActivity{
private Common mApp;
private Service mService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mApp = (Common) mContext.getApplicationContext();
//To use the service you would simply use:
mService = mApp.getService()./*Some public method defined in your service*/;
}
}https://stackoverflow.com/questions/32025266
复制相似问题