正如我在标题中所写: 在启动应用程序后,如果我启动一个调用常规方法的线程,然后等待10秒,这将重复,直到用户退出应用程序,是否会导致任何性能问题?或者它会对其他可能具有更高优先级的Threads和AsyncTasks产生负面影响?比如,假设我有一个由按钮触发的另一个线程,即使主要的重复线程正在进行,它也会立即执行 。有人能给我一个安全的解决方案吗?
感谢您的回答,我将为您提供一个示例:我有一个按钮,预计会被按下一次,所以我会检查用户是否已经每10秒按一次。但是在这个正在进行的线程旁边,用户能够触发其他短线程,例如在后台下载100KB文件或从外部数据库加载一些数据。据我了解,不会有任何混乱,只要我愿意,我就可以拥有正在进行的线程。 (这只是一个例子,我故意不使用按钮的监听器)
答案 0 :(得分:0)
它不会对用户体验本身产生负面影响,因为你是在UI线程上运行它所以它不应该阻止它(这假设你的方法没有做任何事情搞乱经验)。
至于确保其他线程在它之前运行,你可以设置线程优先级,但是多线程是一个很难处理的事情,你几乎无法做什么总是有一些在这一个面前切断了其他线程。
许多因素决定在特定实例中执行哪个线程,其中许多线程都在您的控制范围之外。虚拟机将尝试尽可能接近您的意图执行,但这不是保证。您应该以一种运行良好的方式设计您的应用程序,即使您的线程稍微不同步。
答案 1 :(得分:0)
使用IntentService是您想要做的正确方法。根据任务的性质,它可能会也可能不会产生性能影响。
来自docs:
IntentService类为。提供了简单的结构 在单个后台线程上运行操作。这允许它 处理长时间运行的操作,而不会影响您的用户界面 响应。此外,IntentService不受大多数用户的影响 接口生命周期事件,因此它继续在环境中运行 这将关闭AsyncTask
厌倦了并发访问,并确保您使用的进程是线程安全的。