我的问题是我需要发送延迟1秒的消息.处理程序然后启动一些操作,你得到了图片.
但是仍然存在一些条件,其中应该删除已经发送的消息(在第二次过去之前)以防止处理程序做任何事情.我无法弄清楚如何做到这一点(或者如果它甚至可能),所以如果你们中的任何人都有线索,请告诉我.
我有一个处理程序,我使用如下:
handler.postDelayed(Play, 1000);
Run Code Online (Sandbox Code Playgroud)
当我的应用程序onPause()在完成之前被调用时,我需要暂停它并告诉它不要执行"postDelayed"直到我恢复.
这是可能的,还是有另一种方式?
我的问题是,当调用onPause()时,我暂停音频(SoundManager),但如果此后调用此handler.postDelayed,音频将不会暂停,并将继续在后台播放我的应用程序.
@Override
public void onPause()
{
Soundmanager.autoPause()
}
Run Code Online (Sandbox Code Playgroud)
但是1000ms后的postDelayed再次启动音频播放.
我在我的onCreate()方法中添加了这部分代码,它崩溃了我的应用程序.需要帮忙.
logcat的:
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread
that created a view hierarchy can touch its views.
Run Code Online (Sandbox Code Playgroud)
码:
final TextView timerDisplayPanel = (TextView) findViewById(R.id.textView2);
Timer t = new Timer();
t.schedule(new TimerTask(){
public void run(){
timerInt++;
Log.d("timer", "timer");
timerDisplayPanel.setText("Time ="+ timerInt +"Sec");
}
},10, 1000);
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以使用handler().postdelayed两次?
我的意思是,我想创建一个按钮,单击它时会更改颜色并保持此状态1秒,然后,1秒后另一个按钮更改颜色.
我创建了以下代码:
在onclicklistener中:
btn3.setBackgroundColor(Color.WHITE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
checkAnswer();
waitAnswer();
btnRsp3.setBackgroundResource(R.drawable.selector);
}
}, 1000);
Run Code Online (Sandbox Code Playgroud)
检查答案:
public void CheckAnswer(){
btn1.setBackgroundColor(Color.GREEN);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
}
}, 500);
btn1.setBackgroundResource(R.drawable.selector);
}
Run Code Online (Sandbox Code Playgroud)
我认为问题出现在CheckAnswer上,因为它看起来并没有停留在这个postDelayed中并且步入waitAnswer.
谢谢
据我所知postDelayed()有两个参数runnable和duration delay.在kotlin下面的代码实际上做了什么:
Handler().postDelayed({
sendMessage(MSG, params.id)
taskFinished(params, false)
}, duration)
Run Code Online (Sandbox Code Playgroud)
这里第一个是两个函数调用,第二个是持续时间延迟.哪里可以运行?这对于kotlin来说是不是像lambda?有人请解释一下吗?
我想知道,一劳永逸.我在很多地方读过.当我想做一些"长时间操作"时,我应该使用一个Handler.
但我不明白为什么?所有我的'长时间操作'我用常规线程包围,它工作正常.
我为什么要用Handler它呢?
我必须使用的唯一一次Handler是,当我不得不安排一些任务时(postDelayed)
有什么我想念的主要想法handlers(当我真的应该使用它时)?或者也许没有真正的区别?
我正在尝试从Handler更改ActionBar的背景.最终目标是将Handler传递给AsyncTask,但是现在甚至从Thread调用Handler.sendMessage()会导致奇怪的行为.通过调试器,我能够看到Handler收到Message并随后运行setActionBarBackground()直到结束.
具有蓝色底部笔划的默认ActionBar完全从屏幕上消失,并且不会被新的GradientDrawable替换.我怀疑背景在某种程度上是无效的.此外,当我再次关注EditText时,会出现正确的GradientDrawable ActionBar背景.我期望的行为是对actionDone进行简单更改的背景.
任何关于为什么会发生这种情况的见解将不胜感激!
相关代码:
TestActivity.java
public class TestActivity extends RoboSherlockFragmentActivity {
@InjectView(R.id.ET_test) EditText testET;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(MainApp.TAG, "onCreate");
setContentView(R.layout.test_activity);
testET.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
if (i == EditorInfo.IME_ACTION_DONE) {
String loc = testET.getText().toString();
InputMethodManager mgr = (InputMethodManager) getSystemService(
Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(testET.getWindowToken(), 0);
Toast.makeText(TestActivity.this, "EditText done!", Toast.LENGTH_SHORT).show();
/*TestQuery tq = new TestQuery(TestActivity.this, mHandler);
tq.execute();*/
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException …Run Code Online (Sandbox Code Playgroud) 我在Handler使用Robolectric 测试代码时遇到了麻烦.例如:
public class Client {
private Handler mMainThreadHandler;
public interface Callback{
void ok();
}
public Client() {
mMainThreadHandler = new Handler(Looper.getMainLooper());
}
public void doSomeStuff(Callback callback){
//doing...
mMainThreadHandler.post(new Runnable(){
@Override public void run() {
callback.ok();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
如何Runnable立即运行代码?它在我的测试完成执行之前没有运行.
我正在使用postDelayed方法,Handler以便在一定时间后执行操作:
private static int time_to_wait = 2000;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// Make Action
}
}, time_to_wait);
Run Code Online (Sandbox Code Playgroud)
现在在等待时间的中间我想要更改剩余毫秒的值,因为一些处理结果,让我们说它现在等待1000毫秒,我想让它开始从2000再次计数,所以,我设置time_to_wait值到2000年,但它没有计数,因为它只需要var值(2000),只是等待那个时间,无论将time_to_wait值更改为任何其他值.
我是Swift和SpriteKit的新手.很多SpriteKit动作的样本都在Objective C中,我无法在Swift中映射,也无法工作.
如果运行SKAction,并且在SKAction完成后想要做其他事情,我如何在Swift中做到这一点?
spaceMan.runAction(spaceManDeathAnimation, completion: {
println("red box has faded out")
})
Run Code Online (Sandbox Code Playgroud)
任何想法将不胜感激.
编辑:
for i in 0...29 {
textures.append(SKTexture(imageNamed: "spaceManDeath_\(i)"))
}
spaceManDeathAnimation = SKAction.repeatActionForever(SKAction.animateWithTextures(textures, timePerFrame: 0.15625))
Run Code Online (Sandbox Code Playgroud) handler ×10
android ×9
postdelayed ×2
callback ×1
completion ×1
delay ×1
kotlin ×1
messages ×1
robolectric ×1
skaction ×1
sprite-kit ×1
swift ×1
timertask ×1