- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要编写一个小型 Android 应用程序,并且想要更新我的 Activity 中的一个元素非常快速且频繁地按下按钮后(每约 50-250 毫秒)。
我还希望能够更新元素更改的频率计时器正在运行。
所以我总是使用“Executors.newSingleThreadScheduledExecutor()”来创建一个新的单线程。但这是关于 CPU/RAM 的最佳解决方案吗?
我确实需要经常更改此元素,并且我不希望设备滞后。
当前代码:
// OnCreate
mtimerTask = new Runnable() {
@Override
public void run() {
// set some variables
runOnUiThread(new Runnable() {
@Override
public void run() {
// update some things on the Activity
}
});
}
};
mscheduledPool = Executors.newScheduledThreadPool(1);
// onclickListener
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mscheduledPool.isShutdown() || firstExecute) {
// firstExecute necessary because isShutdown is always false at the beginning
firstExecute = false;
mscheduledPool.scheduleAtFixedRate(mtimerTask, 0, sleepTime, TimeUnit.MILLISECONDS); // sleepTime standard = 200
} else {
mscheduledPool.shutdownNow();
}
}
});
// triggered by buttons
private void updateSpeed(boolean increase) {
if (increase) {
someValue += 25;
sleepTime = Math.round((60 * 1000) / someValue);
if (!mscheduledPool.isShutdown()) {
mscheduledPool.shutdownNow();
mscheduledPool = Executors.newSingleThreadScheduledExecutor();
mscheduledPool.scheduleAtFixedRate(mtimerTask, 0, sleepTime, TimeUnit.MILLISECONDS);
}
}
else {
someValue -= 25;
sleepTime = Math.round((60 * 1000) / someValue);
if (!mscheduledPool.isShutdown()) {
mscheduledPool.shutdownNow();
mscheduledPool = Executors.newSingleThreadScheduledExecutor();
mscheduledPool.scheduleAtFixedRate(mtimerTask, 0, sleepTime, TimeUnit.MILLISECONDS);
}
}
}
也许使用“mscheduledPool.scheduleAtFixedRate”返回的“ScheduleFuture”可以节省更多资源?
期待您的答复:D
最佳答案
如果您的想法是仅更新 Activity 的 UI,而不执行繁重的计算、网络访问、数据库访问等,我建议您使用 Handler.postDelayed() 方法。它将在主线程上排队一个可运行对象,并且在所述可运行对象中您可以执行 UI 修改。
这样您就不必创建新线程并自行管理它。
对于有关内存使用和性能的每个问题,实现这两种解决方案并分析应用程序实际上是有意义的。这样您就可以清楚地了解两种方法所使用的资源。
关于java - 使用 Timer/ScheduledThreadPool 来减少频繁更改元素的 CPU 负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155456/
我有一个包含值的字符串数组(duh...)。 有没有一种简单的方法可以获取出现次数最多的条目?有点像 values[37].getMostOften(); 干杯:) 最佳答案 您可以使用GroupBy
我目前正在将一款用 C#(适用于 Windows Phone)开发的游戏移植到 Java (Android)。 我们在 Java 版本中遇到了内存问题,在分析之后,似乎是由于内存中的大量 String
对于播放音频文件的 iPhone 应用程序,我正在开发一个系统来跟踪用户在他们听过的任何一集中的进度(例如,他们听 file1 的前 4:35,然后开始另一个文件,然后返回到文件 1,它从 4:35
如果您按下 UIbutton 显示 UITextView,将请求代码 Ì 再次按下 UIbutton 再次显示 UITextView :/ 最佳答案 .h 文件中只有一个 int 变量,如下所示..
我在 Application_End 上处理的项目中使用临时数据库: protected void Application_End() { if (_db != null) _db.Dispo
我是一名优秀的程序员,十分优秀!