簡體   English   中英

如何在android中執行后台進程?

[英]How to perform background process in android?

我正在IntentService中執行一些操作(將圖像上傳到webservice)。 請參閱下面的代碼。

在活動里面我叫這樣的服務。 我在捕獲圖像后調用下面的方法,即在onActivityResult內部。 當我在onActivityResult中調用此方法時,應用程序正在被掛起。 我能夠在IntentService中執行任務。 但是這種活動正在被絞死。

private void callService(){
    Intent intent = new Intent(this, TestIntentService.class);
    intent.putExtra("imageData", imageData);
    startService(intent);
}

這是我的IntentService類。 我可以在callImageUploadAPI()中執行webservice調用。 我在這做錯什么嗎?

public class TestIntentService extends IntentService {

    public TestIntentService() {
        super("com.screens.testapp");
        // TODO Auto-generated constructor stub
    }
//imageData passed from the activity
    @Override
    protected void onHandleIntent(Intent intent) {
        // TODO Auto-generated method stub
    if(intent != null){
        Bundle extras = intent.getExtras();
        imageData= extras.getString("imageData");
    }
        callImageUploadAPI(imageData);
    }

    private void callImageUploadAPI(final String imageData) {

        // TODO Auto-generated method stub
        try {
            if (Log.checkNetworkStatus(TestIntentService.this)) {

            } else {

            }
        } catch (Exception e) {
            // TODO: handle exception

        }
    }

}

謝謝

如果您需要在后台執行任務,Android會提供一個名為AsyncTask的類,您可以將其擴展並用於執行網絡操作或任何其他繁重的操作。 這是Android Developer Website(AsyncTask Page)的一個例子

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

這可以通過這種方式在您的代碼中使用:

if (Log.checkNetworkStatus(TestIntentService.this)) {
               new DownloadFilesTask().execute(url1, url2, url3);
            } else {

            }

為了您在后台使用服務執行操作。

您可以從活動中啟動服務,您可以為服務分配一個線程,並為該線程和UIThread分配通信的處理程序。

請查看: http//developer.android.com/guide/components/services.html

偷偷偷看

服務是一種應用程序組件,可以在后台執行長時間運行的操作,但不提供用戶界面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM