0

Bluetooth デバイスに接続し、データを読み取り、AChartEngine を使用してメインのアクティビティでグラフ化する Android アプリを作成しています (この部分全体が機能します)。

WebView (PhoneGap を使用) を含む 2 つ目のアクティビティを含めたいと考えています。メイン アクティビティでボタンが押されると、2 番目のアクティビティが開き、最初のアクティビティはバックグラウンドで引き続き動作し、AChartEngine グラフは更新され続けます。

私の現在のコードは、AsyncTask を使用してこの問題に取り組みます。これは、アプリが Bluetooth 経由でデータの受け入れとグラフ化を開始する前に正常に動作します。その後、ボタンを押して 2 番目のアクティビティを開くと、アプリケーション全体がクラッシュします。

バックグラウンドで別のアクティビティを操作しながら、フォアグラウンドで 1 つのアクティビティを表示するにはどうすればよいですか? 非同期にグラフに追加するために受信したすべてのデータポイントに対して新しい AsyncTask を作成するため、開いている AsyncTasks の数の制限がこの問題を引き起こしている可能性があると考えましたが、いつでも開いている数は十分に制限を下回ってください。

現在のコードの関連部分は次のとおりです。

public class viewer extends Activity
{
    /* ... */

    public void handleButtonPress() {
        // called when our button is pressed
        new StartWebview(viewer.this).execute();
    }

    protected class StartWebview extends AsyncTask<Void, Void, Void> {
        public Activity activity;

        public StartWebview(Activity activity) {
            this.activity = activity;
        }

        @Override
        protected Void doInBackground(Void... values) {
            Intent i = new Intent(viewer.this, WebActivity.class);
            activity.startActivity(i);
            return null;
        }
    }

    protected class NewPoints extends AsyncTask<Double, Void, Void> { // called each time we receive a new data point

        @Override
        protected Void doInBackground(Double... values) {
            mCurrentSeries.add(values[0], values[1]); // x, y
            if (mChartView != null) {
                mChartView.repaint();
            }
            return null;
        }
    }
}
public class WebActivity extends DroidGap
{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/index.html");
    }
}
4

1 に答える 1

2

アクティビティが表示されなくなったら、Android がそれを完全に破棄する可能性は十分にあります。

フォアグラウンド サービスからデータを収集して、データを sqlite データベースに支えられた contentprovider のような永続的なデータ ストアに格納する必要があります。

次に、ローダーを使用してデータを取得し、グラフ作成ツールに提供します。新しいデータがデータベースに自動的に到着するたびに、コンテンツ プロバイダーに通知されます。

これはやり過ぎに聞こえるかもしれませんが、単純な画面回転でもすべてのデータが失われ、クラッシュする可能性があります。

于 2012-08-07T04:30:22.800 に答える