【发布时间】:2012-08-07 04:22:23
【问题描述】:
我正在编写一个连接到蓝牙设备、读取数据并使用 AChartEngine 在主 Activity 中绘制数据的 Android 应用程序(这整个部分都有效)。
我想包含第二个 Activity,其中包含一个 WebView(由 PhoneGap 提供支持)。在主 Activity 中按下按钮时,第二个 Activity 应该打开,而第一个 Activity 继续在后台活动,并且 AChartEngine 图表继续更新。
我当前的代码使用 AsyncTask 解决了这个问题,它在应用开始通过蓝牙接受和绘制数据之前运行良好。之后,当我按下按钮打开第二个 Activity 时,整个应用程序崩溃了。
如何在前台显示一个 Activity 而在后台操作另一个 Activity? 我认为打开的 AsyncTask 数量的限制可能会导致这个问题,因为我创建了一个为我收到的每个数据点创建新的 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");
}
}
【问题讨论】:
-
对不起,不是你的 AsyncTask 的问题。一个活动未显示在屏幕上,那么与该活动相关的所有方法也将被销毁。
标签: android multithreading android-intent android-asynctask android-activity