定期在Android中的活动之间发送数据。

时间:2013-08-09 20:03:16

标签: android multithreading

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

我的疑问是:

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

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

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

    另一个想法:让绘图线程在用户移动到第二个活动时停止执行,然后从第二个活动中生成两个线程(使用者和生产者线程)来执行任务(即计算参数和获取它们,并且pendulum实现Parcelable接口,因此它可以传递给第二个活动。

    1. 这个问题有更好/更合适的方法吗?

2 个答案:

答案 0 :(得分:2)

我的建议是使用一个带有两个片段的活动。比你没有问题来管理线程和传递数据。让两个片段使用回调与Activity通信。

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

两种设置都有相同的想法,有一个模型和两个视图。优点是您的绘图和计算线程不会因为Activity切换而死亡。此外,您可以在任何视图中获得最新数据,并随时控制您的主题。

答案 1 :(得分: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()

中再次启动绘图
相关问题