补上漏下的几篇博客

本文探讨了Android应用启动时Splash页面的实现方式,包括使用新线程休眠、定时器和Handler更新界面的技术。同时,解析了ListView每个item点击事件中将position设置为final类型的原因,以确保在不同生命周期阶段数据的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:一个App的第一个页面即Splash页面常会停留几秒,再进入主页。楼主总结了下Android实现这种停留的几种方式。

one:开启新线程休眠几秒,然后在handler中更新。

new Thread(new Runnable(){   

    public void run(){   

        Thread.sleep(XXXX);   

        handler.sendMessage(); //告诉主线程执行任务   

    }   

}).start

two:java中定时器方式 Timer:

 new Timer().schedule(new TimerTask() {


            @Override
            public void run() {


            }
        }, 1000);

注意终止timer线程,可以调用timer.cancel()方法,或者timer==null制空操作。这些甚至可以在run方法中进行;


three;

new Handler().postDelayed(new Runnable(){   

    public void run() {   

    //execute the task   

    }   

 }, delay);

其实三和一原理是一样都是handler中更新,


分享个小问题:想必大家监听ListView 每个item 的点击时间有时候会在Adapter的getView()方法中实现的,

convertView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                list.get(position); //会提示我们将bean类型设置为final类型的,
            }
        });

那为什么要把那个position设置为final类型呢。。。

先科普下java关键在final左右:

1.final修饰的类不能继承,修饰的方法不能重新,修饰的变量值不能改变。

你肯定会问,这个跟今天说的问题有什么关系呢。是的,这得说说匿名内部类的问题了,即是:为什么局部内部类和匿名内部类只能访问局部final变量?的问题;

当getView方法执行完毕之后,变量position的生命周期就结束了,而此时OnClickListener对象的生命周期很可能还没有结束,那么在OnClickListener的onClick方法中继续访问变量a就变成不可能了,但是又要实现这样的效果,怎么办呢?Java采用了 复制  的手段来解决这个问题。方法中的局部变量和形参都必须用final进行限定了,生命周期不一致的问题,数据不一直问题就能够解决。。

详细的java机制会解释,参考文章:http://www.cnblogs.com/dolphin0520/category/361055.html













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值