【发布时间】:2017-12-26 18:34:04
【问题描述】:
我有一个由后台服务启动的活动,以显示该服务从服务器接收到的滚动消息。可以只有一条滚动消息或一组多条滚动消息,一次滚动一条。
我的问题是管理循环滚动多条消息和多组多条消息的理想方法是什么?我已经在工作线程、AsyncTask 等中尝试了我的循环器循环。
详情:
我的滚动活动接收要显示的消息,作为可用于从服务范围访问的字符串数组。例如,服务启动 Activity 以便一个接一个地滚动多条消息:
- 我的服务使用要显示的消息填充
MyService.messages[],然后启动MyScrollActivity。 -
MyScrollActivity的大小为MyService.messages[]。如果 >1,则启动MyCyclerThread(或 AsyncTask 等 - 还没有找到最好的方法!) -
MyCyclerThread循环通过MyService.messages[]并将MyScrollActivityTextView 设置为messages[i]并在屏幕上设置一次动画,一次一条消息迭代(一条消息滚动,然后下一条,等等 - 在循环结束时,它从i=0重新开始,并再次重复消息。 - 重复第 3 步,直到服务取消活动或显示另一个活动。循环器线程(或其他任何循环)此时需要终止。
我希望那个特定的工作线程(正在执行循环)死掉,并且在其活动停止时永远不会回来。但是由于某种原因,每当重新启动 Activity(例如要显示一批新消息)时,旧的循环器/工作线程就会重新启动,同时还会有一个用于新消息的新线程。
我尝试将Thread.currentThread().interrupt() 添加到活动的onPause 和onDestroy 方法中,我在日志中看到线程确实被中断了。但就像我说的那样,它会复活(即使使用与之前相同的 ID)并再次开始循环。这意味着无论我启动活动多少“X”次,我也会获得“X-1”个线程运行。
我玩弄了 Activity 单实例 XML、各种“isThreadABCrunning”标志等。我什至尝试在我的循环器循环中使用 AsyncTask。我的想法不多了。
帮助,我是 Android 的初学者/中级...我知道足以制造麻烦,显然。关于线程或活动,我有什么遗漏吗?是否像以不同方式处理我的活动一样简单?
我很欣赏 30,000 英尺的概述,然后我可以根据需要提供代码示例(我已经经历了太多的迭代,暂时无法确定一个在这里发布),如果我走近了,很抱歉违反帖子的最佳实践。
更新:动画代码
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);
【问题讨论】:
标签: android android-activity android-asynctask android-thread