我有一个由后台服务启动的活动,以显示服务从服务器接收的滚动消息。可以只有一个滚动消息或一组多个滚动,一次一个滚动。
我的问题是,管理循环滚动多条消息以及多组多条消息的理想方法是什么?我已经在工作线程,AsyncTask等中尝试了我的循环器循环。
详细信息:
我的滚动活动接收要显示的消息,作为可供其从服务范围访问的字符串数组。比如说,例如,服务启动活动,以便一个接一个地滚动几条消息:
MyService.messages[]
,然后启动MyScrollActivity
。MyScrollActivity
的大小为MyService.messages[]
。如果> 1,请启动MyCyclerThread
(或AsyncTask等等 - 无法找到最佳方式!) MyCyclerThread
遍历MyService.messages[]
并将MyScrollActivity
TextView设置为messages[i]
并在屏幕上设置动画一次,一次一次消息迭代(一条消息滚动,然后是接下来,等等 - 在循环结束时,它从i=0
重新开始并再次重复这些消息。我希望那个特定的工作线程(它正在进行循环)死掉,并且在它的活动停止时永远不会回来。但由于某种原因,每当重新启动活动时(比如显示新的一批消息),旧的循环器/工作线程将重新启动,并为新消息重新启动。
我尝试将Thread.currentThread().interrupt()
添加到活动的onPause
和onDestroy
方法中,我在日志记录中看到线程确实被中断了。但就像我说的那样,它复活了(即使它具有之前的相同ID)并再次开始循环。这意味着无论多少' X'我开始活动的时候,我也得到了X-1'正在运行的线程数。
我玩弄了活动单实例XML,各种" isThreadABCrunning"我甚至尝试过使用AsyncTask作为循环器循环。我的想法已经不多了。
帮助,我是Android的初学者/中级人员......显然,我知道这足以惹麻烦了。是否有关于线程或活动的遗漏?它可能就像处理我的活动一样简单吗?
我很欣赏一个30,000英尺的概述,然后我可以根据需要提供代码示例(我已经经历了太多的迭代以确定现在发布的一个),很抱歉,如果我和#39; m踩着接近违反帖子的最佳做法。
更新:动画代码
slide = new TranslateAnimation(dm.widthPixels, -params.width, 0, 0);
slide.setDuration(animDuration);
slide.setRepeatCount(repititions);
slide.setRepeatMode(Animation.RESTART);
slide.setInterpolator(new LinearInterpolator());
slide.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
msgIsScrolling = true;
}
@Override
public void onAnimationEnd(Animation animation) {
msgIsScrolling = false;
}
@Override
public void onAnimationRepeat(Animation animation) {
//nothing to do
}
});
textView_message.startAnimation(slide);
答案 0 :(得分:1)
我的直觉反应是“多线程”解决方案是解决此问题的错误方法。我的第一个想法是:
Animator.AnimatorListener
的{{1}}方法重新触发动画。基本上,你在活动中有一些方法可以接收一条消息并启动动画。在首次显示您的活动时以及每当滚动完成消息时,您都会调用此方法。
由于这一切都存在于活动本身内部,因此当活动消失时,不需要进行任何清理。