Java 如何为应用内计费创建单独的线程

Java 如何为应用内计费创建单独的线程,java,android,multithreading,Java,Android,Multithreading,我关注的是安卓系统,它指出: 警告:不要在主线程上调用getSkuDetails方法。调用此方法会触发可能阻止主线程的网络请求。相反,创建一个单独的线程并从该线程内部调用getSkuDetails方法 对于以下代码: IInAppBillingService mService; ServiceConnection mServiceConn = new ServiceConnection() { @Override public void onServiceDisconnect

我关注的是安卓系统,它指出:

警告:不要在主线程上调用getSkuDetails方法。调用此方法会触发可能阻止主线程的网络请求。相反,创建一个单独的线程并从该线程内部调用getSkuDetails方法

对于以下代码:

 IInAppBillingService mService;

ServiceConnection mServiceConn = new ServiceConnection() {
    @Override
    public void onServiceDisconnected(ComponentName name) {
        mService = null;
    }

    @Override
    public void onServiceConnected(ComponentName name,
                                   IBinder service) {
        mService = IInAppBillingService.Stub.asInterface(service);
        Intent serviceIntent =
                new Intent("com.android.vending.billing.InAppBillingService.BIND");
        serviceIntent.setPackage("com.android.vending");
        getActivity().bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
        ArrayList<String> skuList = new ArrayList<String>();
        skuList.add("iap_one");
        Bundle querySkus = new Bundle();
        querySkus.putStringArrayList("ITEM_ID_LIST", skuList);
        try {
            Bundle skuDetails = mService.getSkuDetails(3,
                    getActivity().getPackageName(), "inapp", querySkus);
            int response = skuDetails.getInt("RESPONSE_CODE");
            if (response == 0) {
                ArrayList<String> responseList
                        = skuDetails.getStringArrayList("DETAILS_LIST");

                for (String thisResponse : responseList) {
                    try {
                        JSONObject object = new JSONObject(thisResponse);
                        String sku = object.getString("productId");
                        String price = object.getString("price");
                        Log.d("Test Price", price);
                    } catch (JSONException e){
                        Log.e("MYAPP", "unexpected JSON exception", e);
                    }
                }
            }

        } catch (RemoteException e) {
            Log.e("MYAPP", "unexpected Remote exception", e);
        }

    }
};
IInAppBillingService MSService;
ServiceConnection MSServiceConn=新的ServiceConnection(){
@凌驾
ServiceDisconnected上的公共无效(组件名称){
mService=null;
}
@凌驾
服务连接上的公共无效(组件名称,
IBinder服务){
mService=IInAppBillingService.Stub.asInterface(服务);
意向服务意向=
新意图(“com.android.vending.billing.InAppBillingService.BIND”);
setPackage(“com.android.vending”);
getActivity().bindService(serviceIntent、MSServiceConn、Context.BIND\u AUTO\u CREATE);
ArrayList skuList=新的ArrayList();
skuList.添加(“iap_one”);
Bundle querySkus=新Bundle();
querySkus.putStringArrayList(“项目ID列表”,skuList);
试一试{
Bundle skuDetails=mService.getSkuDetails(3,
getActivity().getPackageName(),“inapp”,querySkus);
int response=skuDetails.getInt(“response_CODE”);
如果(响应==0){
ArrayList响应列表
=skuDetails.getStringArrayList(“详细信息列表”);
for(字符串thisResponse:responseList){
试一试{
JSONObject对象=新的JSONObject(此响应);
String sku=object.getString(“productId”);
String price=object.getString(“price”);
Log.d(“测试价格”,价格);
}捕获(JSONException e){
Log.e(“MYAPP”,“意外JSON异常”,e);
}
}
}
}捕获(远程异常){
Log.e(“MYAPP”,“意外远程异常”,e);
}
}
};

您需要创建实现可运行的类,并通过构造函数或使用asynctask类插入所需的变量

class ImplementsRunnable implements Runnable {
  private myvar;

  public ImplementsRunnable(String myvar){
    this.myvar=myvar;
  } 

  public void run() {
     System.out.println("ImplementsRunnable : myvar: " + myvar);
  }

}

您需要创建实现可运行的类,并通过构造函数或使用asynctask类插入所需的变量

class ImplementsRunnable implements Runnable {
  private myvar;

  public ImplementsRunnable(String myvar){
    this.myvar=myvar;
  } 

  public void run() {
     System.out.println("ImplementsRunnable : myvar: " + myvar);
  }

}

AsyncTask
是android中在后台线程上执行操作的标准方式。关于如何在网络上实现这一点的大量信息。
AsyncTask
是安卓系统后台线程的标准方式。网上有很多关于如何做到这一点的信息。