Java 调用了IntentService onCreate(),但未调用OnHandleContent()
我正在使用以下方法启动Java 调用了IntentService onCreate(),但未调用OnHandleContent(),java,android,android-service,intentservice,Java,Android,Android Service,Intentservice,我正在使用以下方法启动IntentService: private void startMyService(Data data) { Intent intent = new Intent(this, MyService.class); intent.putExtra(KEY_DATA, data.toJson()); startService(intent); } 数据类: public class Data extends ArrayList<MyObject&
IntentService
:
private void startMyService(Data data) {
Intent intent = new Intent(this, MyService.class);
intent.putExtra(KEY_DATA, data.toJson());
startService(intent);
}
数据
类:
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);
}
}
我有两个测试场景:
- 数据包含2000个对象
- 数据可容纳4000个对象
服务
可以完美运行
对于4000个对象,调用服务
的onCreate()
方法,就是这样<代码>onHandleIntent()未被调用。应用程序只是在一段时间后抛出一个ANR
我已经用Log.d()
调用和onHandleIntent()
第一行上的断点进行了测试,当Data
包含4000个对象时,它根本不被调用
TransactionTooLargeException
未被抛出
我根本没有抛出异常,不知道出了什么问题
这种行为的原因可能是什么?如果您正在筛选logcat,则可能看不到
TransactionTooLargeException
。在意图中可以传递的数据量有一个合理的限制。4000个序列化为JSON的对象肯定太多了!这是错误的做法。您的应用程序架构有缺陷
您只需将4000个对象存储在一个静态
变量中,这样服务
就可以访问它们,而不必序列化它们,将它们从活动
传递到服务
,然后反序列化它们
或者,您需要将4000个对象序列化为一个文件,或者使用数据库保存数据。尝试将json保存在sqlite中,以便您可以通过从intentService类调用方法直接访问它。这可能会有所帮助:如果绑定器事务失败,似乎并不总是存在TransactionTooLargeException
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
}
}