`
droid_dfh
  • 浏览: 5130 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android中Timer与TimerTask跟handler的交互以及android键盘的操纵

 
阅读更多

Timer跟TimerTask其实非常简单,用来执行一段规定时间内完成的任务,本文做的是设置Button的文本,首先activity创建的时候会显示默认文本“哈哈”,3S‘之后将Button文本改成“嘿嘿”,如果点击了Button,则定时器会进行新的一轮的定时任务,基于这个原理其实是可以开发类似于轮询的这种业务,但是使用这种方式不太好。
同时,点击Button会切换软键盘的状态,控制显示隐藏软键盘。

 

 

public class TestTimerTaskActivity extends Activity implements OnClickListener {
	private static final int MESSAGE_WHAT = 100;
	private Button btnClick;
	private Timer mTimer;
	private TimerTask mTimerTask;
	private InputMethodManager inputMethodManager;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.timer);

		init();
		mTimer = new Timer(true);
		initTimerTask();

	}

	/**
	 * Initialize TimeTask
	 */
	private void initTimerTask() {
		if (null != mTimer && null != mTimerTask)
			mTimerTask.cancel();
		mTimerTask = new MyTimerTask();
		mTimer.schedule(mTimerTask, 3000);
	}

	/**
	 * Initialize the views
	 */
	private void init() {
		btnClick = (Button) findViewById(R.id.btnClick);
		btnClick.setOnClickListener(this);

		inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
	}

	/**
	 * Handler Update UI
	 */
	Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if (msg.what == MESSAGE_WHAT) {
				btnClick.setText(String.valueOf(msg.obj));
			}
		}

	};

	/**
	 * Override Button ClickListener
	 */
	@Override
	public void onClick(View v) {
		int id = v.getId();
		switch (id) {
		case R.id.btnClick:
			btnClick.setText("哈哈");
			initTimerTask();
			toggleSoftKeyBoard();
			break;

		default:
			break;
		}
	}

	/**
	 * toggleSoftKeyBoard status
	 */
	private void toggleSoftKeyBoard() {
		if (inputMethodManager.isActive()) {
			inputMethodManager.toggleSoftInput(
					InputMethodManager.SHOW_IMPLICIT,
					InputMethodManager.HIDE_NOT_ALWAYS);
		}
	}

	/**
	 * Send message to UIThread
	 * 
	 * @param what
	 *            message identifies
	 * @param str
	 *            Content of the message
	 */
	private void sendMssage(int what, String str) {
		Message message = handler.obtainMessage(what, str);
		handler.sendMessage(message);
	}

	/**
	 * Custom Derived class
	 * 
	 * @author wallace
	 * 
	 */
	private class MyTimerTask extends TimerTask {

		@Override
		public void run() {
			sendMssage(MESSAGE_WHAT, "嘿嘿");
		}
	}

}

 

 

如果你想在activity刚创建的时候就调出软键盘,上述切换软键盘状态的函数是不起作用的,要用这个函数,其实没有必要用这段代码显示软键盘,直接在manifest文件里配置activity的时候给activity配置android:windowSoftInputMode="stateVisible|adjustPan"这个属性,就能自动弹出软键盘

 

private void toggleSoftKeyBoard() {
		Timer timer = new Timer();
		timer.schedule(new TimerTask() {

			@Override
			public void run() {
				inputMethodManager.toggleSoftInput(
						InputMethodManager.SHOW_IMPLICIT,
						InputMethodManager.HIDE_NOT_ALWAYS);
			}
		}, 100);
	}

 

0
0
分享到:
评论

相关推荐

    Handler和TimerTask实现的简易定时器

    首先,Handler是Android中的一个核心组件,主要用于线程间的通信,特别是主线程(UI线程)与其他工作线程之间的交互。它通过Message对象来传递消息,并在适当的时间处理这些消息。而TimerTask是Java的定时任务类,...

    Android-UI-TimerTask.rar_android_android timetask_android ui

    总结,`Android-UI-TimerTask.rar`中的资料主要讲述了如何利用`TimerTask`和`Timer`来在后台线程安排任务,然后在主线程安全地更新UI,这对于理解Android中多线程与UI交互的重要性有很大帮助。通过合理运用这些工具...

    利用Handler实时更新时间

    在Android开发中,实时更新界面元素常常涉及到线程间的通信,这里主要讲解如何利用Handler、Timer、TimerTask和Message这四个关键组件来实现这一功能。首先,我们需要理解这些组件的基本概念和作用。 **Handler** ...

    安卓天气日历时间选择倒计时相关-Button倒计时用到了Timer计时器和Handler.zip

    本资料包“安卓天气日历时间选择倒计时相关-Button倒计时用到了Timer计时器和Handler.zip”主要关注如何在Android应用中实现Button的倒计时功能,该功能通常涉及到两个关键组件:`java.util.Timer` 和 `android.os....

    android timer

    通过查看项目源码,我们可以学习到如何结合`Timer`和`TextView`更新倒计时文本,以及如何处理线程间的交互。 5. **最佳实践** - 使用`Handler`或`CountDownTimer`代替`Timer`,因为它们更适应Android环境,尤其是...

    Android Handler 图片浏览器

    在Android开发中,Handler是一种非常重要的组件,它与线程通信密切相关,特别是在更新UI和处理异步任务时。本文将深入探讨如何利用Handler构建一个图片浏览器,并结合计时器(Timer)来实现特定功能。 首先,理解...

    Android定时器

    Handler更适合简单且与UI交互密切的定时任务,而Timer和TimerTask适用于复杂的定时任务,特别是那些需要后台持续运行的场景。 在提供的`TimerDemo`文件中,可能包含了使用以上两种方式实现的定时器示例代码,通过...

    Android Framelayout显示静态和动态的扑克牌

    标题"Android Framelayout显示静态和动态的扑克牌"暗示我们将探讨如何在Framelayout中展示静态图像(如扑克牌)以及如何实现这些图像的动态效果,这通常涉及到Android的动画机制。 首先,让我们深入了解`...

    Android用ViewPager实现手动切换,用Timer + Handler实现自动切换,左右完美无限滑动效果非常平滑

    本篇文章将详细讲解如何利用ViewPager实现手动切换,并结合Timer和Handler来实现自动切换,以及创建左右完美无限滑动的效果,确保滑动过程极其平滑。 首先,ViewPager的基本用法是通过设置Adapter来填充数据。...

    Android的线程使用来更新UI

    在Android开发中,更新UI(用户界面)是应用程序与用户交互的关键部分。然而,由于Android的主线程(也称为UI线程)负责处理所有的用户输入事件以及绘制UI,因此任何耗时的操作都应避免在此线程中执行,以免导致应用...

    android自动播放动画

    总之,Android自动播放动画涉及的技术包括Handler、Runnable、Timer、TimerTask、属性动画(ObjectAnimator或ValueAnimator)以及视图动画(Animation)。通过灵活运用这些工具和概念,开发者可以创造出丰富多彩的...

    用ViewPager实现手动切换,用Timer + Handler实现自动切换,左右完美无限滑动效果非常平滑_广告展示.zip

    这个项目中,开发者使用了ViewPager组件配合Timer和Handler来实现这一功能。下面我们将详细探讨这些知识点。 首先,**ViewPager**是Android SDK中的一个控件,它允许用户在多个视图之间进行水平滑动。在广告展示或...

    安卓Android源码——用ViewPager实现手动切换,用Timer+Handler实现自动切换.zip

    Timer类可以安排一次或重复的任务,而Handler则用于在主线程中执行任务。具体步骤如下: 1. 创建一个Timer对象,调用`Timer.schedule(TimerTask task, long delay, long period)`方法来定时执行任务。这里的任务...

    Android 入门经典——编写Android计时器程序

    在Android应用开发中,计时器通常通过`java.util.Timer`类或者使用Android提供的`Handler`和`Runnable`配合来实现。本文将深入探讨如何编写Android计时器程序,为初学者提供入门指导。 首先,我们需要了解Android...

    Android定时器和Handler用法实例分析

    在Android开发中,定时任务和线程间的通信是常见的需求,本实例主要讲解了如何使用Android的定时器(Timer)以及结合Handler来实现定时任务和更新UI。下面将详细阐述这些知识点。 首先,Android中的定时器(Timer)...

    Android定时器和线程实现

    Android中的定时器并非直接内置在SDK中,而是通过Java的标准库`java.util.Timer`和`java.util.TimerTask`来实现。`Timer`类用于调度任务在未来某个时间点或定期执行,而`TimerTask`是执行的具体任务类。创建一个`...

    用ViewPager实现手动切换,用Timer + Handler实现自动切换,左右完美无限滑动效果非常平滑.zip

    这个源码项目是关于如何使用ViewPager实现手动切换以及如何结合Timer和Handler来实现自动切换,达到平滑且无限循环的左右滑动效果。下面我们将深入探讨这些技术点。 首先,`ViewPager`是Android Support Library中...

    android 延时或重复执行任务

    这种方式更适用于与UI交互相关的延时任务,因为`Handler`可以确保任务在主线程中执行,避免了跨线程操作UI的问题。但是,`Handler`的延时任务依赖于主线程的`Looper`循环,如果主线程被阻塞,延时任务也会受到影响。...

    自动图片播放

    在Android应用开发中,我们可以利用Java的Timer类来创建定时任务,而Handler则用于更新UI线程中的状态。 1. **Timer和TimerTask**: Timer类是一个调度工具,可以安排在未来某个时间执行一次或重复执行任务。我们...

Global site tag (gtag.js) - Google Analytics