我有一个小型数据收集应用程序,它有一个按钮来启动和停止服务。查找我的应用程序停止的原因,Android
该服务反过来启动一个新的线程。每收到一次关于它的广播,它就收集有关电压变化的数据。
数据暂时存储在ArrayList中,并且每10秒钟将存储在arrayList中的所有数据转储到数据库中。
应用程序运行良好10-20分钟,但20分钟后应用程序自动停止。有时服务仍在运行,有时服务也会中止。
你们可以告诉我这里可能是什么问题。 我认为可能涉及这个问题的事情是:
1.>我每10秒打开和关闭数据库。我应该改变设计来关闭数据库,只有当整个应用程序完成。
2.>我也采取了一个唤醒锁,但没有任何区别。我是否应该服用wakelock来服务我的服务?
3>最后一点我怎么来认识一下,因为其中的我的应用程序停止错误(我无法连接到USB知道怎么把我想的电池是在排出模式)
更新:
的logcat的误差如下:
E/AndroidRuntime(9770): FATAL EXCEPTION: Timer-0
E/AndroidRuntime(9770): java.util.ConcurrentModificationException
E/AndroidRuntime(9770): at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569)
E/AndroidRuntime(9770): at com.amazon.hsyal.services.LoggerThread$2.run(LoggerThread.java:78)
E/AndroidRuntime(9770): at java.util.Timer$TimerImpl.run(Timer.java:284)
W/ActivityManager( 236): Force finishing activity com.amazon.hsyal/.ui.VoltageSODLoggerActivity
I/ActivityManager( 236): No longer want com.amazon.dcp:OTAService (pid 12299): hidden #16
I/WindowManager( 236): WIN DEATH: Window{417dcd20 com.amazon.hsyal/com.amazon.hsyal.ui.VoltageSODLoggerActivity paused=true}
I/UsageStats( 236): No package stats for pkg:com.amazon.kindle.otter
I/ActivityManager( 236): Process com.amazon.hsyal (pid 9770) has died.
W/ActivityManager( 236): Scheduling restart of crashed service com.amazon.hsyal/.services.LoggerService in 5000ms
I/ActivityManager( 236): Start proc com.amazon.kindle for broadcast com.amazon.kindle/.PrimeAppReceiver: pid=13075 uid=32022 gids={3003, 1015}
W/ActivityManager( 236): Activity pause timeout for ActivityRecord{4173eb10 com.amazon.kindle.otter/.Launcher}
I/ActivityManager( 236): Start proc com.android.settings for broadcast com.android.settings/.TopWindowChangereceiver: pid=13111 uid=1000 gids={1015, 3002, 3001, 3003}
I/ActivityManager( 236): Start proc com.amazon.hsyal for service com.amazon.hsyal/.services.LoggerService: pid=13138 uid=10051 gids={}
W/ActivityManager( 236): Activity destroy timeout for ActivityRecord{41750838 com.amazon.hsyal/.ui.VoltageSODLoggerActivity}
和相应的线程代码如下:
public void run() {
// TODO Auto-generated method stub
dbInstance = new DbClass(ctx);
Log.d("Debuglogger","Came inside thread");
ctx.registerReceiver(this.voltageReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
if(threadStatus == false){
return;
}
if(!DataClass.dataList.isEmpty()){
dbInstance.open();
Iterator<DataClass> itr = DataClass.dataList.iterator();
DataClass a_temp;
while(itr.hasNext()){
a_temp = itr.next();
dbInstance.createEntry(a_temp.getVoltage(), a_temp.getCurrent(), a_temp.getBattery_level(),
a_temp.getTime(), a_temp.getRtime());
}
dbInstance.close();
DataClass.dataList.clear();
Log.d("db-error", "Data written to database and list cleared !");
}
}}, 0, UPDATE_INTERVAL);
}
发布logcat的相关部分,它你甚至可以在应用程序停止后检索('adb -logcat -d> log.txt') – Rajesh
has al ook这里:http://snipt.org/vlC5 这是我可以看到我的包第一个错误 –
这是相应的线程,其中错误正在提交:http://snipt.org/vlD3 –