2012-01-03 4 views
1

SQL 서버 & android sqlite간에 복제를하고 싶습니다. 정상적으로 작동합니다.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

왜 새 스레드에서 서비스를 시작하지 않습니까? –

답변

4

문제가 발생하지 않지만 코드를 읽은 후 서비스 작업이 완료 될 때까지 활동이 시작되지 않았다는 것을 알고있었습니다.

Android 서비스에서 UI 스레드에서 실행됩니다. 서비스에서 더 나은 작업을하고 싶다면 서비스 내에서 스레드를 사용하십시오. UI 스레드를 차단하지 않으며 스레드 (UI와 백그라운드)를 동시에 차단합니다.

+0

예. 이것은 제 문제입니다. 쓰레드를 쓰고 싶습니까? 호출 장소 또는 .. 제발 나를 안내 ... – Piraba

+0

서비스에서 스레드를 작성해야합니다. – Dharmendra

+0

감사드립니다. 샘플 응용 프로그램이나 코드가 있습니까? – Piraba