3

我的 Android 应用程序中有两个活动。主要活动启动一个线程,该线程将绘制一个摆动的钟摆,可以使用“停止”按钮停止它。但是,如果用户移动到第二个活动,他应该能够看到计算出的坐标和振荡参数(角速度等),因为它们是由绘图线程实时计算的。

我的查询是:

  1. 如何将数据从执行振荡的线程发送到第二个活动?注意:数据是定期生成的(FPS),因此我需要在数据可用时立即将数据发送到第二个活动。

  2. 我们可以使用信号量和生产者-消费者解决方案,即绘图线程在哪里产生值,第二个活动启动一个消耗它们的线程?

我的方法:我有一个钟摆类来计算所需的参数。我已经扩展了 SurfaceView 以使用线程执行我的绘图。所以,我想有两个信号量(生产者和消费者),然后让生产者线程(绘图线程)更新参数,然后等待消费者(第二个活动启动的线程)获取它们,重复循环。

另一种思路:让绘图线程在用户移动到第二个activity时停止执行,然后从第二个activity产生两个线程(消费者线程和生产者线程)来执行任务(即计算参数并取参数),而pendulum实现了Parcelable接口,所以它可以传递给第二个活动。

  1. 有没有更好/合适的方法来解决这个问题?
4

2 回答 2

2

我的建议是使用一个 Activity 和两个 Fragment。比您管理线程和数据传递没有问题。让两个 Fragment 使用回调与 Activity 通信。

另一种方法是使用服务来计算数据并将它们传递给所需的活动。这也可以通过回调或使用 Binder 来完成。

两种设置都符合相同的想法,即拥有一个模型和两个视图。优点是您的绘图和计算线程不必因为活动开关而死。此外,您将在任何视图中拥有最新数据,并随时控制您的线程。

于 2013-08-09T23:07:23.727 回答
0

在您用于启动第二个活动的意图中发送数据。除了使用startActivityForResult()

Intent i = new Intent(this, SecondActivity.class);
i.putExtra("sentData","lorem ipsum");
startActivityForResult(i, 1);

这样你就可以来回传递数据。

请参阅此答案以获取我认为将有很大帮助的一个很好的示例: https ://stackoverflow.com/a/10407371/794088

然后管理在您的第一个活动中绘制的暂停,onPause()同样在onResume()

于 2013-08-09T20:12:53.513 回答