Java 在Android中如何将服务对象传递给子类?

Java 在Android中如何将服务对象传递给子类?,java,android,Java,Android,我正在开发一个应用程序,它从网络上获取数据并将其写回网络。为此,我使用了AsyncTask,但这些请求并没有得到优化,所以我必须在每个请求上对用户进行身份验证。现在,我想使用服务来保持与后端的连接,并执行请求,而无需在每个请求上对用户进行身份验证 如果不创建一个新实例,并且不清空服务中需要的所有值,我就很难将此服务对象发送到subactivity。那么,如何在不使用osing值的情况下实现呢 这是我的服务: public class LasteMVService extends Service

我正在开发一个应用程序,它从网络上获取数据并将其写回网络。为此,我使用了AsyncTask,但这些请求并没有得到优化,所以我必须在每个请求上对用户进行身份验证。现在,我想使用服务来保持与后端的连接,并执行请求,而无需在每个请求上对用户进行身份验证

如果不创建一个新实例,并且不清空服务中需要的所有值,我就很难将此服务对象发送到subactivity。那么,如何在不使用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的一些子活动中获得相同的服务实例?

好的,因此您需要一个服务对象,从BaseActivity获取对象的引用,而不是创建一个在整个应用程序中全局可访问的单例类。。 下面是帮助您的源代码

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*/;



    }


}

谢谢,这解决了我的服务对象问题,但现在我遇到了networkOnMainThread问题。希望能解决这个问题。也能解决这些问题,但我无法通过身份验证,所以每个请求大约需要5秒钟才能完成。我想这是因为我使用lib与后端通信
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*/;



    }


}