我開始一個IntentService
以下方法:IntentService的onCreate()調用,但onHandleIntent()不
private void startMyService(Data data) {
Intent intent = new Intent(this, MyService.class);
intent.putExtra(KEY_DATA, data.toJson());
startService(intent);
}
的Data
類:
public class Data extends ArrayList<MyObject> {
public Data() {
super();
}
public Data(Collection<MyObject> myObjects) {
super(myObjects);
}
public String toJson() {
return new Gson().toJson(this);
}
public static Data fromJson(String jsonString) {
return new Gson().fromJson(jsonString, Data.class);
}
}
的IntentService
的相關部分:
public class MyService extends IntentService {
private Data data;
public MyService() {
super("myServiceName");
}
@Override
public void onCreate() {
super.onCreate();
// this gets called properly
Log.d("myTag", "Service onCreate()");
}
@Override
protected void onHandleIntent(Intent intent) {
// this is not called in case of the bigger dataset
Log.d("myTag", "Service onHandleIntent()");
String dataJson = intent.getStringExtra(KEY_DATA);
data = Data.fromJson(dataJson);
// doing stuff with data
}
}
我有2個測試場景:
- 數據保持2000個對象
- 數據保持4000個對象
隨着2000和目的,Service
運行完美無缺。
對於4000個對象,調用Service
的onCreate()
方法,就是這樣... onHandleIntent()
未被調用。一段時間後,該應用只是拋出一個ANR。
我已經與上onHandleIntent()
第一線既Log.d()
電話和斷點測試,它是不是在所有的時候Data
持有4000個對象調用。
TransactionTooLargeException
是不是拋出。
我沒有得到Exception
,根本不知道有什麼問題。
這種行爲的原因是什麼?
嘗試在sqlite中保存json,以便您可以通過調用intentService類中的方法直接訪問它 – Manifest
可能是[SO帖子](http://stackoverflow.com/a/14379016/5015207)會有幫助:如果Binder事務失敗,似乎不會總是有TransactionTooLargeException – 0X0nosugar