使用Achartengine绘制显示ANR的加速度计数据

时间:2014-05-10 06:34:28

标签: android achartengine android-anr-dialog

我正在使用achartengine for android来绘制Acclerometer数据。 但是,一旦启动活动,应用程序就会挂起并在一段时间后显示ANR。 请有人告诉我哪里出错了。 这是我的代码。

    public class TestButtonActivity extends Activity implements
    SensorEventListener{

private LinearLayout lyGforce;
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private TimeSeries timeSeriesGforcex;
private TimeSeries timeSeriesGforcey;
private TimeSeries timeSeriesGforcez;
private XYMultipleSeriesDataset datasetGforce;
private XYMultipleSeriesRenderer rendererGforce;
private XYSeriesRenderer rendererSeriesGforce;
private XYSeriesRenderer rendererSeriesGforcey;
private XYSeriesRenderer rendererSeriesGforcez;
private GraphicalView viewGforce;
Handler h;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_test_button);
    Log.e("", "deepak");
    h = new Handler();
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mAccelerometer = mSensorManager
            .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    mSensorManager.registerListener(this, mAccelerometer,
    SensorManager.SENSOR_DELAY_UI);

    datasetGforce = new XYMultipleSeriesDataset();
    rendererGforce = new XYMultipleSeriesRenderer();
    rendererGforce.setApplyBackgroundColor(true);
    rendererGforce.setBackgroundColor(Color.argb(100, 50, 50, 50));
    rendererGforce.setAxisTitleTextSize(16);
    rendererGforce.setChartTitleTextSize(20);
    rendererGforce.setLabelsTextSize(15);
    rendererGforce.setLegendTextSize(15);
    rendererGforce.setMargins(new int[] { 20, 30, 15, 20 });
    // rendererGforce.setZoomButtonsVisible(true);

    rendererGforce.setPointSize(10);
    rendererGforce.setShowGrid(true);
    rendererGforce.setGridColor(Color.WHITE);

    rendererSeriesGforce = new XYSeriesRenderer();
    rendererSeriesGforce.setColor(Color.GREEN);
    rendererSeriesGforce.setLineWidth(2);

    rendererSeriesGforcey = new XYSeriesRenderer();
    rendererSeriesGforcey.setColor(Color.RED);
    rendererSeriesGforcey.setLineWidth(2);

    rendererSeriesGforcez = new XYSeriesRenderer();
    rendererSeriesGforcez.setColor(Color.BLUE);
    rendererSeriesGforcez.setLineWidth(2);

    rendererGforce.addSeriesRenderer(rendererSeriesGforce);
    rendererGforce.addSeriesRenderer(rendererSeriesGforcey);
    rendererGforce.addSeriesRenderer(rendererSeriesGforcez);

    timeSeriesGforcex = new TimeSeries("x");
    timeSeriesGforcey = new TimeSeries("y");
    timeSeriesGforcez = new TimeSeries("z");

    datasetGforce.addSeries(timeSeriesGforcex);
    datasetGforce.addSeries(timeSeriesGforcey);
    datasetGforce.addSeries(timeSeriesGforcez);

    viewGforce = ChartFactory.getTimeChartView(this, datasetGforce,
            rendererGforce, "");
    viewGforce.refreshDrawableState();
    viewGforce.repaint();
    lyGforce = (LinearLayout) findViewById(R.id.graph_view_container);
    lyGforce.addView(viewGforce);
    viewGforce.refreshDrawableState();
    viewGforce.repaint();

}

@Override
protected void onResume() {
    super.onResume();

}

@Override
protected void onPause() {
    Log.d("onPause", "onPause");
    mSensorManager.unregisterListener(this);
    super.onPause();
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {


}

@Override
public void onSensorChanged(SensorEvent event) {
    float x = event.values[0];
    float y = event.values[1];
    float z = event.values[2];
    Log.d("", "" + x + "" + y + "" + z);

    timeSeriesGforcex.add(new Date(), x);
    timeSeriesGforcey.add(new Date(), y);
    timeSeriesGforcez.add(new Date(), z);

    rendererGforce.setXAxisMax(rendererGforce.getXAxisMax() + 100);
    rendererGforce.setXAxisMin(rendererGforce.getXAxisMin() + 30);
    viewGforce.repaint();
}}

这就是logcat所说的:

05-10 11:47:16.765: I/dalvikvm(3046): threadid=3: reacting to signal 3
05-10 11:47:17.016: D/dalvikvm(3046): JIT unchain all for threadid=1
05-10 11:47:17.766: W/dalvikvm(3046): threadid=3: spin on suspend #1 threadid=1 (pcf=0)
05-10 11:47:18.517: W/dalvikvm(3046): threadid=3: spin on suspend #2 threadid=1 (pcf=0)
05-10 11:47:18.517: I/dalvikvm(3046): "Signal Catcher" daemon prio=5 tid=3 RUNNABLE
05-10 11:47:18.517: I/dalvikvm(3046):   | group="system" sCount=0 dsCount=0       obj=0x418cd468 self=0x5adad250
05-10 11:47:18.517: I/dalvikvm(3046):   | sysTid=3050 nice=0 sched=0/0 cgrp=apps handle=1524468640
05-10 11:47:18.517: I/dalvikvm(3046):   | state=R schedstat=( 0 0 0 ) utm=0 stm=0 core=1
05-10 11:47:18.517: I/dalvikvm(3046):   at dalvik.system.NativeStart.run(Native Method)
05-10 11:47:18.517: I/dalvikvm(3046): "main" prio=5 tid=1 RUNNABLE JIT
05-10 11:47:18.517: I/dalvikvm(3046):   | group="main" sCount=1 dsCount=0 obj=0x41630728 self=0x4161a658
05-10 11:47:18.517: I/dalvikvm(3046):   | sysTid=3046 nice=0 sched=0/0 cgrp=apps handle=1074864124
05-10 11:47:18.517: I/dalvikvm(3046):   | state=R schedstat=( 0 0 0 ) utm=2175 stm=26 core=0
05-10 11:47:18.517: I/dalvikvm(3046):   at org.achartengine.chart.TimeChart.getXLabels(TimeChart.java:~190)
05-10 11:47:18.517: I/dalvikvm(3046):   at org.achartengine.chart.XYChart.draw(XYChart.java:314)
05-10 11:47:18.517: I/dalvikvm(3046):   at org.achartengine.GraphicalView.onDraw(GraphicalView.java:166)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.draw(View.java:14126)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13020)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13062)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.draw(View.java:13839)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewGroup.drawChild(ViewGroup.java:3086)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2923)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13015)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13062)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.draw(View.java:13839)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewGroup.drawChild(ViewGroup.java:3086)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2923)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13015)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13062)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.draw(View.java:13839)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewGroup.drawChild(ViewGroup.java:3086)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2923)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13015)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13062)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.draw(View.java:13839)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewGroup.drawChild(ViewGroup.java:3086)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2923)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.draw(View.java:14129)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.widget.FrameLayout.draw(FrameLayout.java:471)
05-10 11:47:18.517: I/dalvikvm(3046):   at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2231)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13020)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13062)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1411)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1359)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewRootImpl.draw(ViewRootImpl.java:2377)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2249)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1882)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1009)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5508)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.Choreographer.doCallbacks(Choreographer.java:562)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.Choreographer.doFrame(Choreographer.java:532)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.os.Handler.handleCallback(Handler.java:730)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.os.Handler.dispatchMessage(Handler.java:92)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.os.Looper.loop(Looper.java:213)
05-10 11:47:18.517: I/dalvikvm(3046):   at android.app.ActivityThread.main(ActivityThread.java:5225)
05-10 11:47:18.517: I/dalvikvm(3046):   at java.lang.reflect.Method.invokeNative(Native Method)
05-10 11:47:18.517: I/dalvikvm(3046):   at java.lang.reflect.Method.invoke(Method.java:525)
05-10 11:47:18.517: I/dalvikvm(3046):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
05-10 11:47:18.517: I/dalvikvm(3046):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
05-10 11:47:18.517: I/dalvikvm(3046):   at dalvik.system.NativeStart.main(Native Method)
05-10 11:47:19.268: W/dalvikvm(3046): threadid=3: spin on suspend #3 threadid=1 (pcf=0)
05-10 11:47:19.268: I/dalvikvm(3046): "Signal Catcher" daemon prio=5 tid=3 RUNNABLE
05-10 11:47:19.268: I/dalvikvm(3046):   | group="system" sCount=0 dsCount=0 obj=0x418cd468 self=0x5adad250
05-10 11:47:19.268: I/dalvikvm(3046):   | sysTid=3050 nice=0 sched=0/0 cgrp=apps handle=1524468640
05-10 11:47:19.268: I/dalvikvm(3046):   | state=R schedstat=( 0 0 0 ) utm=0 stm=0 core=1
05-10 11:47:19.268: I/dalvikvm(3046):   at dalvik.system.NativeStart.run(Native Method)
05-10 11:47:19.268: I/dalvikvm(3046): "main" prio=5 tid=1 RUNNABLE JIT
05-10 11:47:19.268: I/dalvikvm(3046):   | group="main" sCount=1 dsCount=0 obj=0x41630728 self=0x4161a658
05-10 11:47:19.268: I/dalvikvm(3046):   | sysTid=3046 nice=0 sched=0/0 cgrp=apps handle=1074864124
05-10 11:47:19.268: I/dalvikvm(3046):   | state=R schedstat=( 0 0 0 ) utm=2246 stm=26 core=0
05-10 11:47:19.268: I/dalvikvm(3046):   at org.achartengine.chart.TimeChart.getXLabels(TimeChart.java:~190)
05-10 11:47:19.268: I/dalvikvm(3046):   at org.achartengine.chart.XYChart.draw(XYChart.java:314)
05-10 11:47:19.268: I/dalvikvm(3046):   at org.achartengine.GraphicalView.onDraw(GraphicalView.java:166)
05-10 11:47:19.268: I/dalvikvm(3046):   at android.view.View.draw(View.java:14126)
05-10 11:47:19.268: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13020)
05-10 11:47:19.268: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13062)
05-10 11:47:19.268: I/dalvikvm(3046):   at android.view.View.draw(View.java:13839)
05-10 11:47:19.268: I/dalvikvm(3046):   at android.view.ViewGroup.drawChild(ViewGroup.java:3086)
05-10 11:47:19.268: I/dalvikvm(3046):   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2923)
05-10 11:47:19.268: I/dalvikvm(3046):   at android.view.View.getDisplayList(View.java:13015)

1 个答案:

答案 0 :(得分:1)

终于找到了。

    rendererGforce.setShowGrid(true);

onCreate()中的这句话是罪魁祸首。 从onCreate()中注释掉它,并在viewGforce.repaint()之前添加到onSensorChanged();它会完美无缺。

确保在onPause()中将其设置为false。

有一天可能会拯救某人的时间。