2015-09-17 39 views
1

已經創建了一個IntentService,在我創建了一個靜態塊中,我做了一些網絡相關的工作,在其上給NetworkOnMainThreadException代碼樣子:靜態塊拋出NetworkOnMainThreadException

public class XService extends IntentService { 
    static { 
     //Net related work 
     //on executing this gives NetworkOnMainThreadException 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     //Doing my work here 
    } 
} 

throw NetworkOnMainThreadExceptionIntentSrevice如何在單獨的線程上運行?

請幫助和提前致謝。

+1

只有onHandleIntent()回調函數在後臺線程上運行。 – Luksprog

回答

1

發生這種情況是因爲您正在主線程上執行網絡操作,並且這在Android 3.0及更高版本中是不允許的。即使它在服務中,服務也會在UI線程上運行,除非您專門在另一個線程中啓動它們或在其中創建一個線程。

您可以通過使用線程或AsyncTask在主UI線程中的服務中運行任務來解決此問題。

嘗試在onStartCommand()

創建一個新的線程或者你可以這樣做......

new Handler().post(new Runnable() { 
@Override public void run() { 
getData(); 
} }); 
0

你應該做你想要的內部OnHandleIntent()做網絡相關的工作,因爲這方法在運行單獨的線程。

你在哪裏把網相關的工作現在在主線程上運行。

相關問題