android-Android中的时间延时问题

问题描述

Android中的时间延时问题

我想在应用程序中创建一个闪光点效果。为此我需要一个时间延迟,一个是100 ms,其它是20ms。这是我使用的代码:

Thread timer = new Thread();
    long longTime = 100;
    long shortTime = 20;
    for (int x = 0; x < 2000000; x++)
    {
        layout.setBackgroundColor(background);
        try {
            timer.sleep(longTime);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        layout.setBackgroundColor(backgroundBlack);
        try {
            timer.sleep(shortTime);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

问题是,当我单击按钮来调用该代码,没有出现所要的效果。所以我做了一点调试且确信它是定时调用。但是我不确定如何调用一个休眠线程。

解决方案

你应该使用Handler来实现

public class Strobe extends Activity {

    private LinearLayout mLinearLayout;

    private Handler mHander = new Handler();

    private boolean mActive = false;
    private boolean mSwap = true;   

    private final Runnable mRunnable = new Runnable() {

        public void run() {
            if (mActive) {
                if (mSwap) {
                    mLinearLayout.setBackgroundColor(Color.WHITE);
                    mSwap = false;
                    mHander.postDelayed(mRunnable, 20);
                } else {
                    mLinearLayout.setBackgroundColor(Color.BLACK);
                    mSwap = true;
                    mHander.postDelayed(mRunnable, 100);
                }
            }
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mLinearLayout = (LinearLayout) findViewById(R.id.strobe);
        startStrobe();
    }

    private void startStrobe() {
        mActive = true;
        mHander.post(mRunnable);
    }
}

给活动设置一个主题,让它全屏显示。

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

解决方案二:

你的问题在于没有在线程里运行。为了在线程中运行代码,必须重写它的run()方法。基于你当前的代码,下面代码可能实现你想要的效果。

Thread timer = new Thread(){
    public void run(){
        long longTime = 100;
        long shortTime = 20;
        for (int x = 0; x < 2000000; x++)
        {
            layout.setBackgroundColor(background);
            try {
                Thread.sleep(longTime);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            layout.setBackgroundColor(backgroundBlack);
            try {
                Thread.sleep(shortTime);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

timer.start();

解决方案三:

在非UI线程里不能直接操作UI,所以要使用Handler异步通知,没有放在run()方法里相信是LZ笔误。

时间: 2024-08-30 02:17:48

android-Android中的时间延时问题的相关文章

关于android audiotrack 中返回播放时间的问题

问题描述 关于android audiotrack 中返回播放时间的问题 trackplayer = new AudioTrack(AudioManager.STREAM_MUSIC SampleRate AudioFormat.CHANNEL_OUT_STEREO AudioFormat.ENCODING_PCM_16BIT BufferSizeMax AudioTrack.MODE_STREAM); samplerate 是44100 buffersizemax 是256*1024当 (tr

Android开发中实现IOS风格底部选择器(支持时间 日期 自定义)_Android

本文Github代码链接 https://github.com/AndroidMsky/AndoirdIOSPicker 先上图吧: 这是笔者最近一个项目一直再用的一个选择器库,自己也在其中做了修改,并决定持续维护下去. 先看使用方法: 日期选择: private void showDateDialog(List<Integer> date) { DatePickerDialog.Builder builder = new DatePickerDialog.Builder(this); bui

Android开发中DatePicker日期与时间控件实例代码

一.简介 二.方法 最日常的使用方法了 日期控件DatePicker 时间控件TimePicker 月份从0开始 三.代码实例 效果图: 代码: fry.Activity01 package fry; import com.example.DatePicherDemo1.R; import android.app.Activity; import android.os.Bundle; import android.widget.DatePicker; import android.widget.

浅析android系统设计中的回调思想

一.为何写作本文 在慢慢深入接触android开发的过程中,我越来越发现android中(至少应用曾的开发)用到了很多回调的思想.比如activity的生命周期,fragment的生命周期,皆是回调函数实现的,android中的事件处理机制其一就是回调,线程方面的异步任务.loader.hanlder等都是基于回调的,等等. 可见android的其一根本思想就是回调,需要你来参与时,回调用相关的回调方法,你来填充. 可以说回调的思想浸润与android设计的方方面面,android开发中几乎带有

Android Service中方法使用详细介绍

  Android Service中方法使用详细介绍 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务.例如,一个从service播放音乐的音乐播放器,应被设置为前台运行,因为用户会明确地注意它的运行.在状态栏中的通知可能会显示当前的歌曲并且允许用户启动一个activity来与音乐播放器交互. Service的两种实现形式 1.非绑定 通过调用应用程序组件(例如Activity)的startService()方法来启动一个服务.一旦启动,服务就

ANDROID应用中十大常见UX错误

  Android 开发者关系团队每天都会试用无数的 App 或者受到无数的开发者发来的请求评测的 App,在评测如此之多的应用之后,他们总结出了10个最常见的错误. Android 开发者关系团队每天都会试用无数的 App 或者受到无数的开发者发来的,请求评测的 App.在评测如此之多的应用之后,他们总结出了一些最常见的错误,并且在这期节目中为大家呈现出来. 在正式介绍这些错误之前,我想稍微提一句.这些错误是非常具有普遍意义的错误,也就是说,你用十个应用可能就会碰见这十个错误,甚至你会在一个应

在android程序中处理来电

问题描述 在android程序中处理来电 我想在android平台上处理来电.我想设定一个时间期限, 如果手机接收到电话时,就会自动的发给来电用户一个信息. 如何设置? 解决方案 你需要在 Activity 或者 Service中申明 PhoneStateListener: PhoneStateListener phoneStateListener = new PhoneStateListener() { @Override public void onCallStateChanged(int

Android编程中软键盘基本用法分析_Android

本文实例讲述了Android编程中软键盘基本用法.分享给大家供大家参考,具体如下: 调用下面代码:(第一次调用显示,再次调用则隐藏,如此反复),this指activity InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); imm.sh

浅析Android系统中HTTPS通信的实现_java

前言最近有一个跟HTTPS相关的问题需要解决,因此花时间学习了一下Android平台HTTPS的使用,同时也看了一些HTTPS的原理,这里分享一下学习心得. HTTPS原理HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议封装之上进行传输的.HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议.所以,研究HTTPS协议原理,最终就是研究S