导航:首页 > 操作系统 > android线程

android线程

发布时间:2022-03-06 15:12:29

A. android开发中如何使用多线程

handler其实就是消息处理机制。首先在主线程也就是UI创建一个Handler对象,复写其中的handMessage( Message msg)方法。该方法里的msg就是子线程发来的消息,表示子线程处理完了,以这个msg来通知主线程。让主线程来作UI的绘制工作。

那么子线程工作完了就要发消息了,比如:
run(){
data = getDataFromInternet();//耗时工作
Message msg = handler.obtainMessage(0, data);//通过handler得到消息,该消息的标识为0,消息内容是data
handler.sendMessage(msg);//发送
}
然后handler在主线程就负责接收:
public Handler handler = new Handler(){//处理UI绘制

@SuppressWarnings("unchecked")
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
data = (List<Map<String, Object>>) msg.obj;
if(data == null){
Toast.makeText(AllMovieActivity.this, "网络连接失败,获取不到影片信息", 1).show();
}else {

adapter = new HotMoviedapter(AllMovieActivity.this, data, R.layout.allmovielist_item,
new String[] { "picurl", "chname", "director", "leadrole",
"fshowtime", "country" }, new int[] { R.id.picurl,
R.id.chname, R.id.director, R.id.leadrole,
R.id.fshowtime, R.id.country },mListView);
TextView v = new TextView(AllMovieActivity.this);
v.setHeight(80);
v.setSelectAllOnFocus(false);
mListView.addFooterView(v);
mListView.setAdapter(adapter);
}
break;

default:
break;
}
}
};

B. Android studio线程

第一步,你先获取进度条对象

java">ProgressBarpb=newProgressBar(getApplicationContext());//动态创建
//ProgressBarpb=findViewById(R.id.pb);//静态获取

第二步,你得先创建一个子线程,子线程直接设置进度条

Threadthread=newThread(newRunnable(){
@Override
publicvoidrun(){
for(inti=0;i<100;i++){
finalintfinalI=i;
pb.setProgress(i);

}
}
});


第三步,你得建立与main主线程的通信,两种方式选其一,我选个最简单的,使用系统提供的runOnUiThread函数,传递你第一步创建的子线程,作为参数即可

runOnUiThread(thread);

大功告成!

——

还有一种handler的方法,你需要可以提~

C. 简述android多线程机制

Handler对象与其调用者在同一线程中,如果在Handler中设置了延时操作,则调用线程也会堵塞。每个Handler对象都会绑定一个Looper对象,每个Looper对象对应一个消息队列(MessageQueue)。如果在创建Handler时不指定与其绑定的Looper对象,系统默认会将当前线程的Looper绑定到该Handler上。在主线程中,可以直接使用newHandler()创建Handler对象,其将自动与主线程的Looper对象绑定;在非主线程中直接这样创建Handler则会报错,因为Android系统默认情况下非主线程中没有开启Looper,而Handler对象必须绑定Looper对象。这种情况下,需先在该线程中手动开启Looper(Looper.prepare()-->Looper.loop()),然后将其绑定到Handler对象上;或者通过Looper.getMainLooper(),获得主线程的Looper,将其绑定到此Handler对象上。Handler发送的消息都会加入到Looper的MessageQueue中。一说Handler包含两个队列:线程队列和消息队列;使用Handler.post()可以将线程对象加入到线程队列中;使用Handler.sendMessage()可以将消息对象加入到消息队列中。通过源码分析证实,Handler只有一个消息队列,即MessageQueue。通过post()传进去的线程对象将会被封装成消息对象后传入MessageQueue。使用post()将线程对象放到消息队列中后,当Looper轮询到该线程执行时,实际上并不会单独开启一个新线程,而仍然在当前Looper绑定的线程中执行,Handler只是调用了该线程对象的run()而已。如,在子线程中定义了更新UI的指令,若直接开启将该线程执行,则会报错;而通过post()将其加入到主线程的Looper中并执行,就可以实现UI的更新。使用sendMessage()将消息对象加入到消息队列后,当Looper轮询到该消息时,就会调用Handler的handleMessage()来对其进行处理。再以更新UI为例,使用这种方法的话,就先将主线程的Looper绑定在Handler对象上,重载handleMessage()来处理UI更新,然后向其发送消息就可以了。

D. android 线程

Android分为两个线程。一个是主线程(更新ui用的),一个是工作线程(异步耗时操作用的)

E. android线程有几种

在开发工程中线程可以帮助我们提高运行速度,Android开发中我知道的线程有四个一个是老生长谈的Thread,第二个是asyncTask,第三个:TimetTask,第四个是Looper.

F. android需要考虑结束线程吗

  1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。

  2. 使用interrupt()方法中断线程。

  3. 使用stop方法强行终止线程(不推荐使用,可能发生不可预料的结果)。

其他注意事项:

前两种方法都可以实现线程的正常退出,也就是要谈的优雅结束线程,第3种方法相当于电脑断电关机一样,是不安全的方法。

G. Android如何阻塞一个线程让其等待一个时间发生之后再继续执行

你所谓的线程阻塞是指的ui线程吗?这应该是从你在开发的经验以及测试当中去体验的,如果你说是用代码去判断线程阻塞的话,估计比较复杂,也没那个必要,android的机制在出现ui线程阻塞的话会出现anr给予用户提示,出现这样的情况是开发者在开发过程中就得去避免的!

H. Android 中如何停止一个线程

有三种方法可以结束线程:
1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止
2. 使用interrupt()方法中断线程
3. 使用stop方法强行终止线程(不推荐使用,可能发生不可预料的结果)
前两种方法都可以实现线程的正常退出,也就是要谈的优雅结束线程;第3种方法相当于电脑断电关机一样,是不安全的方法。

I. Android开发中为什么要用到线程

在线程中如果想对UI进行操作需要用 Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: break; default: break; } } }; 在线程中用handler.sendEmptyMessage(0);进行UI的操作,你最好贴一下报错信息,不然无法确定是不是这个原因

J. android 强行关闭线程

这个好办,这里有两个线程吧,线程A 线程mSender。
设:让线程A,监视线程mSender
第一步:
在A中定义一个变量:ExecutorService transThread = Executors.newSingleThreadExecutor();
解释:transThread 官方名称是“单一线程池变量”,他是做什么的呢,它就像我们给A的一块赛车场,用来玩遥控赛车。
第二步:
在A中再定义一个变量: Future transPending;

解释:transPending就像我给A一个用来控制遥控赛车的遥控器一样
第三步:
在A中定义个线程mSender对象:
private final Runnable mSender = new Runnable() {

public void run() {
}};
解释:这是你写的对象,他就相当于我给A的一个遥控赛车。
第四步:
在A中添加如下语句:transPending = transThread.submit(mSender);

解释:这一步就相当于把赛车(mSender)放入场地(第一步中我们定义的transThread),并且用遥控器“transPending”来控制他。
(注:这里你是否会有疑惑,我没有写"mSender.start()"之类的语句怎么让我的赛车跑起来啊(运行run()方法),放心,有了“transPending = transThread.submit(mSender);”这一步,赛车是自动跑起来的,也就是mSender会自动调用run的。)

第五步:
现在你可以用遥控器“transPending”干很多事情了
transPending.cancel(true);无论线程现在是否运行中,立刻终止。
transPending.cancel(false);当前线程若没有运行(比如挂起状态)就终止它。
transPending所做的不止这些。

阅读全文

与android线程相关的资料

热点内容
gps测量加密法 浏览:958
量价绝杀pdf 浏览:480
循环压缩机振动高的原因 浏览:396
教育机构网站源码 浏览:541
程序员租客被骗 浏览:397
安卓机用了三年会怎么样 浏览:294
图片怎么转pdf加密 浏览:448
解压缩软件免安装版 浏览:962
安卓短信如何存档 浏览:143
汽车导航不读文件夹 浏览:107
全球云服务器如何注册 浏览:884
udp直播流如何在服务器里播放器 浏览:591
macbrew安装php 浏览:425
点特征提取算法 浏览:502
python弹窗显示输入的文字 浏览:751
python数字和中文互转 浏览:639
汽车空调压缩机外壳 浏览:458
大型服务器都是采用什么模式 浏览:5
服务器为什么跳闸 浏览:398
怎么用python分析基金收益 浏览:990