我正在使用Android Studio,我希望每半秒循环一次
"Random rand = new Random();
int value = rand.nextInt(10);"
所以无论如何,谢谢你的时间,如果你能提供帮助,那就太好了。 :)
此致
伊戈尔
EDIT
感谢大家的善意和有用的答案。我会在尝试每一个后立即选择最佳答案。 (现在不在我的电脑上)但是再一次,谢谢大家。
编辑
对于任何有类似问题的人,我都可以使用它。这是最终的代码。
包sarju7.click;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends ActionBarActivity {
Random rand = new Random();
Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Runnable r = new Runnable() {
public void run() {
int value = rand.nextInt(10);
TextView t1 = (TextView) findViewById(R.id.clicker);
t1.setText(Integer.toString(value));
handler.postDelayed(this, 400);
}
};
handler.postDelayed(r, 400);
}
}
再次感谢大家。你们是最棒的。我喜欢堆栈溢出!
答案 0 :(得分:3)
使用postDelayed()
。例如,此活动每五秒显示一次Toast
:
/***
Copyright (c) 2012 CommonsWare, LLC
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy
of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required
by applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, either express or implied. See the License for the specific
language governing permissions and limitations under the License.
From _The Busy Coder's Guide to Android Development_
http://commonsware.com/Android
*/
package com.commonsware.android.post;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class PostDelayedDemo extends Activity implements Runnable {
private static final int PERIOD=5000;
private View root=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
root=findViewById(android.R.id.content);
}
@Override
public void onResume() {
super.onResume();
run();
}
@Override
public void onPause() {
root.removeCallbacks(this);
super.onPause();
}
@Override
public void run() {
Toast.makeText(PostDelayedDemo.this, "Who-hoo!", Toast.LENGTH_SHORT)
.show();
root.postDelayed(this, PERIOD);
}
}
run()
Runnable
Runnable
方法是您完成工作的方法,并安排removeCallbacks()
在您所需的延迟期后再次运行。只需调用postDelayed()
即可结束循环。您可以在任何小部件上调用FrameLayout
;就我而言,我使用的框架提供的android.R.id.content
称为{{1}},因为此活动没有其他用户界面。
答案 1 :(得分:2)
使用此
在onCreate中创建
Random rand = new Random();
handler=new Handler();
handler.postDelayed(myRunnable, 100);
在onCreate
之外声明它myRunnable=new Runnable() {
@Override
public void run() {
int value = rand.nextInt(10);
handler.postDelayed(this, 100);
}
}
答案 2 :(得分:1)
Random rand = new Random();
Handler handler = new Handler()
Runnable r=new Runnable() {
public void run() {
int value = rand.nextInt(10);
handler.postDelayed(this, 500);
}
};
handler.postDelayed(r, 500);
答案 3 :(得分:0)
虽然这里的所有答案都很好,但它们并不一定能解决为什么你想要这个或你将对结果做什么。您可以在代码中的任何位置执行此操作,但您可能会问,因为它会阻止UI线程,如果它在那里运行并且您可能不想要它。
您需要在不同的线程或服务的后台运行它,以便用户可以在循环运行时进行交互。这是基本的答案 - 在MAIN或UI线程之外的另一个线程上运行此循环。 (这里有很多答案可以解决这个问题。)
如果你希望每半秒在屏幕上显示一个随机数,那么很多这些选项都没问题,除非他们不解释如果你在不同的线程中运行它们,那么你需要创建您的Activity
中的类,然后使用runOnUiThread
线程方法更新您的视图类(否则您将收到错误)。
如果你想用它作为进一步后台处理的开始,你应该考虑一个Service
,你可以在其中扩展你的循环的功能以及它可能需要执行的任何其他任务,而UI线程是运行。例如,如果您需要随机数来选择屏幕上显示的图像,则可能需要在向Activity
提供图像的服务中运行此项。
希望有所帮助。