我正在使用以下方法启动一个 IntentService
:
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
}
}
我有两个测试场景:
- 数据包含2000个对象
- 数据包含4000个对象
Service
无误地运行。但是当有4000个对象时,仅调用
Service
的onCreate()
方法,而onHandleIntent()
则没有被调用。应用程序在一段时间后会出现ANR。我已经通过对
onHandleIntent()
第一行设置日志和断点的方式进行了测试,当Data
包含4000个对象时,该方法根本不会被调用。未抛出
TransactionTooLargeException
。我没有收到任何异常抛出,也不知道出了什么问题。
这种行为的原因可能是什么?