Andriod:安卓线程实现页面的自动跳转
復(fù)制一個(gè)工程,
比如說(shuō)現(xiàn)在我們的Mainactivity.java要自動(dòng)跳轉(zhuǎn)到下一個(gè)頁(yè)面怎么辦?
?如果把
//intert去設(shè)置要跳轉(zhuǎn)的頁(yè)面
?? ??? ?Intent intent = new Intent(this, SecondActivity.class);
?? ??? ??? ?//跳轉(zhuǎn)
?? ??? ?startActivity(intent);
扔到上面去,你會(huì)發(fā)現(xiàn)
?這個(gè)程序一運(yùn)行我們根本就看不到第一個(gè)頁(yè)面
?你想要它自動(dòng)跳轉(zhuǎn),它的邏輯是很簡(jiǎn)單的,加上一個(gè)sleep就好了
那么sleep在安卓中是在哪里呢?
他是這個(gè)線程這個(gè)類,里面的靜態(tài)方法? ? Thread.sleep()????
里面是個(gè)毫秒,我們來(lái)個(gè)3秒? ??? ? Thread.sleep(3000);
這面的波浪線是什么?因?yàn)樗赡墚a(chǎn)生一個(gè)受查異常 ,也就是說(shuō)線程創(chuàng)建可能會(huì)崩潰
錯(cuò)誤提示:????????Unhandled exception type InterruptedException
?所以要加一個(gè)try? catch
?運(yùn)行一下
什么都看不到,
?三秒之后
?
它確實(shí)自動(dòng)跳轉(zhuǎn)了,但此之前我們并沒(méi)有看見(jiàn)頁(yè)面一的數(shù)據(jù)
原因是啥?
實(shí)際上安卓在啟動(dòng)app的時(shí)候有一個(gè)主要的UI線程?
而我們這個(gè)sleep是在當(dāng)前線程做出來(lái)阻塞的
那UI顯示什么意思呢?他會(huì)不斷刷新屏幕界面
你在人家不斷刷新屏幕界面的時(shí)候,你做了睡眠一定會(huì)出問(wèn)題的
UI線程一但sleep的話,就會(huì)造成我們剛才的效果,你是無(wú)法看到第一個(gè)頁(yè)面的任何字符,因?yàn)閁I界面被你弄睡眠了
既然要用到這種效果必須? ? ?sleep? ? 但又不能在? ?UI? 下面? ?sleep,你要在新線程里面sleep
新線程里面去sleep.另外啟動(dòng)一個(gè)線程,在3秒后啟動(dòng)一個(gè)新界面。不要在UI線程中sleep
? ? ? ? 那么如何在安卓(Java)中創(chuàng)建線程呢?
?? ?Thread t = new Thread();
這個(gè)線程有了,但是我還沒(méi)有啟動(dòng)
Thread t = new Thread();//實(shí)例化了一個(gè)線程
如何用呢?
?? ?t.start();//啟動(dòng)線程
那么線程啟動(dòng)以后,你想讓他干啥
?? ??? ?
??? ?pthread_create();????????啟動(dòng)一個(gè)C語(yǔ)言的線程
里面會(huì)有一些傳參
pthread_create(*t1,NULL,(void*)fuc,NULL);
線程的ID號(hào),????????參數(shù),????????會(huì)涉及到回調(diào)函數(shù)
也就是c語(yǔ)言創(chuàng)建線程會(huì)去執(zhí)行????????fuc? ? 這個(gè)函數(shù)
那Java創(chuàng)建線程,我們并沒(méi)有看見(jiàn)所謂的函數(shù)
只是????????????????
????????????????????????Thread t = new Thread();//實(shí)例化了一個(gè)線程
?????????????????????????? ?t.start();//啟動(dòng)線程
那你啟動(dòng)線程,你要他干啥?? ? ? ? 不知道
所以說(shuō)實(shí)例化線程,???????????Thread t = new Thread();? ? ? ? 這面需要一個(gè)接口
? ?
????????Thread t = new Thread(new Runnable() {
?? ??? ??? ?
?? ??? ??? ?@Override
?? ??? ??? ?public void run() {
?? ??? ??? ??? ?// TODO Auto-generated method stub
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ?});
? ?
在這個(gè)run 里面添加你的活
try {
?? ??? ??? ?Thread.sleep(3000);
?? ??? ?} catch (InterruptedException e) {
?? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
在這個(gè)新線程里面延遲三秒
? ?
? ?
?? ??? ??? ??? ??? ?//intert去設(shè)置要跳轉(zhuǎn)的頁(yè)面
?? ??? ??? ??? ?Intent intent = new Intent(this, SecondActivity.class);
?? ??? ??? ??? ??? ?//跳轉(zhuǎn)
?? ??? ??? ??? ?startActivity(intent);
? ??
? ? ?三秒之后再去實(shí)現(xiàn)自動(dòng)的跳轉(zhuǎn)
??
?this在當(dāng)前的線程? ? ? ? Thread是不被識(shí)別的? ? ? ? this? ? ? ?改成? ? MainActivity.this
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
思路:
先創(chuàng)建一個(gè)線程????????Thread t = new Thread
然后線程啟動(dòng)????????????????t.start();
那線程啟動(dòng)干呢? 你要在線程的構(gòu)造方法里面? ?去給他一件事情,Runnable()是一個(gè)接口
你要去重寫里面的? ? ?run? ?方法,run方法里面做的就是你真正要干的活
(不要在UI線程中sleep,UI被sleep暫停刷新了)
? ??
? ??
?運(yùn)行結(jié)果
三秒過(guò)后?
總結(jié)
以上是生活随笔為你收集整理的Andriod:安卓线程实现页面的自动跳转的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ideapad怎么设置u启动 Ideap
- 下一篇: Android:Activity(页面)