假设这是场景:
class A extends TimerTask{
int a;
public void run(){
//operation to be performed periodically
}
}
Run Code Online (Sandbox Code Playgroud)
和
class B{
int delay=2000,interval=3000;
A objectA;
public static void main(String[] args){
Timer t=new Timer();
t.scheduleAtFixedRate(new A(),delay,interval);
}
}
Run Code Online (Sandbox Code Playgroud)
无法run()归还物品?如果我做出这样的改变,就会引用不兼容性.为什么?
我的 Android 应用程序TextView告诉用户数据年龄(“13 分钟前”)。我目前每秒更新一次,使用 aRunnable来捕捉当分钟更改notifyDataSetChanged()为我的适配器时。但这会导致每秒垃圾收集...
TextView当系统时钟每分钟发生变化时,是否有另一种方法来触发更新(或采取一般措施),而无需每秒检查此类变化?
如果不再计算Handler的计数器怎么能停止?也许你可以告诉我如何处理下面的代码.
public void handler() {
nHandler.postDelayed(new Runnable() {
@Override
public void run() {
viewFlipper.setDisplayedChild(8);
}
}, 20000);
}
Run Code Online (Sandbox Code Playgroud) 在我的情况下,我想流式传输音频并在简单的ProgressBar上显示其进度,我找不到用于播放进度的事件处理程序,我在互联网上发现的是我可以制作一个Runnable并在play()上将其激活为如下
public void fireRunnable()
{
Runnable runnable = new Runnable()
{
@Override
public void run()
{
int duration = mediaPlayer.getDuration();
while( mediaPlayer.isPlaying() )
{
Log.v("", mediaPlayer.getCurrentPosition()+"");
}
}
};
runnable.run();
}
Run Code Online (Sandbox Code Playgroud)
在onPrepared()中播放后立即调用它
@Override
public void onPrepared(MediaPlayer arg0)
{
arg0.start();
fireRunnable();
}
Run Code Online (Sandbox Code Playgroud)
现在这首歌开始没有音频和应用程序崩溃在5秒后,这是一个很好的方法,如果是的话我怎么能让它工作?或者我没有其他选择?
帮助将不胜感激.
我想停止这个帖子:
Runnable run= ()->{while(true)[...];};
run.run();
Run Code Online (Sandbox Code Playgroud)
但是没有run.stop()办法.
请建议另一个尽可能短的方法来启动和停止一个线程或一个方法来停止这个运行...的事情.
我用runnable旋转图像.我想旋转图像例如第4次然后暂停/停止rotate.i写了一些函数
public void rotateImage(final View myView, final int size) {
runnable = new Runnable() {
@Override
public void run() {
count++;
myView.setRotation(myView.getRotation() + size);
if (count ==3) {
myHandler.removeCallbacks(runnable);
}
myHandler.postDelayed(this, 100);
// 1000 means 1 second duration
}
};
myHandler.postDelayed(runnable, 100);
}
Run Code Online (Sandbox Code Playgroud)
我可以旋转图像,但我不能停止/暂停旋转.removeCallbacks目前不工作我的代码有什么问题,如果有人知道解决方案,请帮助我
所以,这个问题在此之前(这里和这里)得到了回答,答案对我来说完全有意义:
run()只调用对象的run()方法Thread,但不产生新的线程.因此,run()方法中的代码实际上是在调用它的同一个线程上执行的.
start()另一方面,将线程实例移交给调度程序并调用run()它,因此它生成一个新线程,在该线程上run()执行方法的代码.
但是,我正在努力真正理解这是什么意思,所以我开发了一个案例来验证语句:
public class Test extends Thread{
public void run() {
System.out.println("run() called on thread: " + getName());
}
public static void main(String[] args) throws Exception {
System.out.println("main() called on thread: " + Thread.currentThread().getName());
Test t = new Test();
t.start(); // OR t.run();
}
}
Run Code Online (Sandbox Code Playgroud)
所以,如果上面的描述是真的,那么程序的输出应该是如果我t.run()用来执行print语句,那么线程的名称应该是相同的,因为不应该创建新的线程并且t它只是在与它相同的线程上运行是创建于.另一方面,t.start()实际上应该给我两个不同的线程名称.
但是,在这两种情况下我都得到输出:
main() …Run Code Online (Sandbox Code Playgroud) 我启动了一个runnnable但没有将它分配给变量.我怎么阻止它?我知道它是removeCallbacksAndMessages()方法的组合,但由于我创建了一个匿名的runnable,我不知道传入此方法的参数:
mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
h = new Handler();
final int delay = 1000; //milliseconds
h.postDelayed(new Runnable() {
public void run() {
mUpdateRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int mNumberOfPollsForCurrentDay = (int) dataSnapshot.getChildrenCount();
Random r = new Random();
int randomPollInRangeOfCurrentDayNumberOfPolls = r.nextInt((mNumberOfPollsForCurrentDay + 1) - 1) + 1;
int numberOfPollAnswersAtRandomNumber = (int) dataSnapshot.child(String.valueOf(randomPollInRangeOfCurrentDayNumberOfPolls)).child(POLL_ANSWERS_LABEL).getChildrenCount();
Random rr = new Random();
int randomAnswerBasedFromRandomPollAnswerChoices = rr.nextInt((numberOfPollAnswersAtRandomNumber + 1) - 1) + 1;
mUpdateRef.child(String.valueOf(randomPollInRangeOfCurrentDayNumberOfPolls)).child(POLL_ANSWERS_LABEL).child(String.valueOf(randomAnswerBasedFromRandomPollAnswerChoices)).child("Vote_Count").runTransaction(new Transaction.Handler() {
@Override …Run Code Online (Sandbox Code Playgroud) 所以我有这个代码:
for(Runnable loadTask : mMeshLoadMap.values())
{
if(loadTask != null)
{
loadTask.run();
loadTask = null;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是loadTask = null语句永远不会执行,Android Studio说"分配给loadTask的值"null"永远不会被使用"......
另外,当我在该行设置断点时,调试器永远不会到达它.它可以达到loadTask.run()但不是loadTask = null
我确信这loadTask.run()不会阻止太长时间
听起来非常哲学不是吗?
无论如何,我有一个相当复杂的问题.
我的main_activity类收集了所有僵尸,如下所示:
//Testing Runnable (used to compare the first zombie with the player)
private Runnable updateLocations = new Runnable(){
@Override
public void run(){
try {
while(true) {
image_player.getLocationInWindow(pLoc);
Zombie zoms = zombieCollection.next();
if(!zoms.equals(null)){
zoms.getZombieImage().getLocationInWindow(zLoc);
}
System.out.println("Zombie: x = " + zLoc[0] + "; y = " + zLoc[1]);
System.out.println("Player: x = " + pLoc[0] + "; y = " + pLoc[1]);
Thread.sleep(500);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Run Code Online (Sandbox Code Playgroud)
我的僵尸类收集信息如下:
public class Zombie{
float X, Y; …Run Code Online (Sandbox Code Playgroud)