2012-01-03 120 views
1

我想在sql server上做复制& android sqlite.That工作正常。Android服务 - 启动服务并重定向到另一个活动

一旦我把发票/用户点击返回(我的应用程序后退按钮)按钮,它需要去前/后续活动&也必须开始服务。我不想等待下一个活动。

现在的问题是:我已经完成了这个使用服务。这也很好。但是当用户点击返回按钮时,它会等到服务完成。之后只有它进入上一个/下一个活动。

这是我的后退按钮的代码:

Button reOpCancel = (Button)findViewById(R.id.reOpCancel); 
    reOpCancel.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 

       Intent i = new Intent(getBaseContext(), ListRetailerActivity.class); 
       Bundle bundle = new Bundle(); 
       bundle.putString("RetailerName", retailerName); 
       bundle.putString("RetailerCode", relailerCode); 
       bundle.putString("RouteCode", routeCode); 
       i.putExtras(bundle); 
       View vi = SalesActivityGroup.group.getLocalActivityManager().startActivity("ListRetailerActivity", i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 
       SalesActivityGroup.group.replaceView(vi); 

       ConnectivityManager manager = (ConnectivityManager) getSystemService(LoginActivity.CONNECTIVITY_SERVICE); 
       boolean is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting(); 
       boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting(); 
       if(is3g ||isWifi){ 
        startService(new Intent(RetailerOptionActivity.this, UploadService.class)); 
       }else { 
        Toast.makeText(SalesActivityGroup.group.getParent(), "GPRS/WIFI is not available", Toast.LENGTH_LONG).show(); 
       } 
      } 
    }); 

这是我的服务代码:

public class UploadService extends Service { 
private static final String TAG = "UploadService"; 
private String APPURL = ""; 
private String NAMESPACE = "http://tempuri.org/"; 
private String METHOD_NAME = "convertJSONToDataSet"; 
private String SOAP_ACTION = "http://tempuri.org/IXontService/convertJSONToDataSet"; 
ArrayList<String> uploadFiler = new ArrayList<String>();  
HashMap<Integer,String> uploadTable = new HashMap<Integer, String>(); 
private String strBusinessUnit= ""; 
private String strExecutive = ""; 
private ConnectivityManager manager; 
private Boolean is3g = false; 
private Boolean isWifi = false; 
private int networkType; 


@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 

@Override 
public void onCreate() { 
    Toast.makeText(this, "Upload Service Created", Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "onCreate"); 
    SharedPreferences myPrefs = this.getSharedPreferences("myLogedPrefs",MODE_PRIVATE); 
    strBusinessUnit = myPrefs.getString("BusinessUnit", ""); 
    strExecutive = myPrefs.getString("Executive", ""); 

    manager = (ConnectivityManager) getSystemService(DownlaodTableActivity.CONNECTIVITY_SERVICE); 
    is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected(); 
    isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected(); 
if (is3g) { 
     APPURL = getServicePath("G");; 
    }else if (isWifi) { 
     APPURL = getServicePath("L");; 
    }else if(networkType == TelephonyManager.NETWORK_TYPE_GPRS) { 
     APPURL = getServicePath("G");; 
    } 

} 
@Override 
public void onDestroy() { 
    Toast.makeText(this, "Upload Service Stopped", Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "onDestroy"); 
} 

@Override 
public void onStart(Intent intent, int startid) { 

    Toast.makeText(this, "Upload Service Started", Toast.LENGTH_LONG).show(); 

    if(! APPURL.equals("")){ 
     boolean result = uploadUsingService(); 
     if(!result) { 
      Toast.makeText(this,"Service is not working OR Time out to Connect to service !!!!!!!",Toast.LENGTH_LONG).show(); 
     } 
    }else{ 
     Toast.makeText(this, "GPRS/WIFI is not available", Toast.LENGTH_LONG).show(); 
    } 

    Log.d(TAG, "onStart"); 
    onDestroy(); 

} 

    uploadTable = getUploadTable(); 

    boolean result = true; 

    DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(this); 
    dbAdapter.openDataBase(); 
    System.out.println("==APPURL="+APPURL); 


     try { 
      if(uploadTable.size() > 0){ 
       for (Map.Entry<Integer, String> entry : uploadTable.entrySet()) { 
        String value = entry.getValue(); 
        if(value.equals("WMInvoiceHeader")){ 
         result = getInvoiceHeader(); 
        }else if(value.equals("WMInvoiceLine")){ 
         result = getInvoiceLine(); 
        }else if(value.equals("WMInvoiceHeaderDiscount")){ 
         result = getInvoiceHeaderDiscount(); 
        }else if(value.equals("WMInvoiceSpecialDiscount")){ 
         result = getInvoiceSpecialDiscount(); 
        }else if(value.equals("WMInvoiceCancelHeader")){ 
         result = getInvoiceCancelHeader(); 
        }else if(value.equals("WMInvoiceCancelLine")){ 
         result = getInvoiceCancelLine(); 
        }else if(value.equals("WMTransactionControl")){ 
         result = getTransactionControl(); 
        }else if(value.equals("WMVisitDetail")){ 
         result = getVisitDetail(); 
        }else if(value.equals("WMVisitHeader")){ 
         result = getVisitHeader(); 
        }else if(value.equals("WMReturnHeader")){ 
         result = getReturnHeader(); 
        }else if(value.equals("WMReturnLine")){ 
         result = getReturnLine(); 
        }else if(value.equals("WMPaymentReceipt")){ 
         result = getPaymentReceipt(); 
        }else if(value.equals("WMPaymentAllocation")){ 
         result = getPaymentAllocation(); 
        } 
        System.out.println("==result=="+result); 
        if(!result) break; 
       } 


     } 
     dbAdapter.close(); 
     } catch (Exception e) { 
      System.out.println("==ERROR=="+e.getMessage()); 
      e.printStackTrace(); 
     } 


    return result; 
} 

Problem is don't need to wait until finish service, it need to go next activity

请帮我从这个问题。

+0

为什么不在新线程中启动服务? – 2012-01-03 08:52:13

回答

4

我没有得到你的问题,但在阅读你的代码后,我知道你的活动没有开始,直到服务工作完成了吗?

Android服务在UI线程上运行。 如果你想在服务中做一些更好的工作,你可以在服务中使用线程。它不会阻塞你的UI线程,并且线程(UI和背景)将同时工作。

+0

是的。这是我的问题。哪里想写Thread?呼吁地方或..请引导我在此... – Piraba 2012-01-03 09:19:22

+0

在服务你必须写一个线程。 – Dharmendra 2012-01-03 09:20:40

+0

谢谢,我会试试这个。你有任何示例应用程序或代码? – Piraba 2012-01-03 09:22:25