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");
}
}