我正在编写一个Android应用程序,它连接到蓝牙设备,读入数据,并使用AChartEngine在主Activity中绘制它(整个部分都有效)。
我想要包含第二个Activity,其中包含一个WebView(由PhoneGap提供支持)。当在主Activity中按下按钮时,第二个活动应该打开,而初始活动在后台继续存在并且AChartEngine图继续更新。
我当前的代码使用AsyncTask解决了这个问题,在应用程序开始通过蓝牙接受和绘制数据之前,它可以正常工作。在那之后,当我按下按钮打开第二个Activity时,整个应用程序崩溃。
如何在后台操作另一个Activity时在前台显示一个Activity?我认为AsyncTasks打开数量的限制可能导致此问题,因为我创建了一个我收到的每个数据点都有新的AsyncTask,以便异步地将它添加到图表中,但任何时候打开的数字似乎都在极限之下。
以下是我当前代码的相关部分:
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");
}
}
答案 0 :(得分:2)
一旦活动不再显示,Android完全有可能完全销毁它。
您应该从前台服务进行数据收集,将数据放入一个持久的数据存储,就像sqlite数据库支持的contentprovider一样。
然后使用加载程序获取数据并将其提供给图表工具。每次新数据自动到达数据库时,都会通知内容提供商。
这可能听起来有点过头了,但即使是在简单的屏幕旋转上,你也会丢失所有数据并且可能会崩溃。