android线程问题 注意asynctask是一个子类运行在ui线程中的,内部还是concurrent和handler、looper以及消息队列的处理,和thread加handler没本质区别,除非你架构太烂了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 代码太多了,几个类。这样说吧,我开了一个开台运行的子线程,然后在在Activity中触发事件用AsyncTask改变组件,(注:AsyncTask并不是在那个子线程里的,子线程里并不涉及任何UI有关的处理,或你可以理解为只是打印一样信息) 假设UI主线程为A,子线程为B,AsyncTask为C。楼主的意思是不是 A启动了B,然后B发消息给A,A再启动C? 是B没有发消息给A,你可以理解为B启动后只是调用System.out.println()而已,没其它操作 如果我把子线程也写成AsyncTask的话,在android1.6和2.1中这个问题就可以解决,但是在android1.5中就不行了,我想在android1.5中也能运行 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mStart = (Button)findViewById(R.id.start); mThread1 = new Thread(new Runnable() { public void run() { while(true){ Log.i("Young", "mThread1"); } } }); mThread2 = new Thread(new Runnable() { public void run() { while(true){ Log.i("Young", "mThread2"); } } }); mStart.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { mThread2.start(); } }); mThread1.start(); }我是这么来做的,结果是正常打印语句。楼主在启动B时,使用的B.start(),还是B.run()的方法呢? 当然是B.start()啦,B是可以正常运行的,我的问题是为什么要B运行完后C才会执行,明明是独立的线程来的,又没啥关系,子线程又没涉及到任何UI C用AsyncTask是涉及UI操作的,问题就是要等B执行后后,才可以进行UI操作 上面说过了,是ui子类的, 看看sdk怎么描述的吧,楼上的某位不会看不懂subclassed是什么意思吧 AsyncTask must be subclassed to be used. The subclass will override at least one method 刷ui用 publishProgress(Progress...),重写 onProgressUpdate方法就行了 我再详细点描述一下吧,我在主Activity进入另一个Activity,然后单击触发事件,触发事件有两个操作:“1,返回主Activity 2,启动一个静态对象里的一个子线程(这个线程不涉及任何UI操作)”,回主Activity后,你单击触发事件,这个触发事件是:“调用AsyncTask改变主Activity的组件的”问题:只有等子线程(这个线程不涉及任何UI操作)运行结束后,才能改变主Activity的组件我的解决方法:把子线程(这个线程不涉及任何UI操作)也写成AsyncTask,在android1.6和2.1测试通过,但在android1.5又是只有等子线程(这个线程不涉及任何UI操作)运行结束后,才能改变主Activity的组件。请问有方法在android1.5,1.6,2.1都可以解决这个问题的方法吗 1. AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行, 这就有效地避免了使用Handler带来的麻烦2.需要注意的是AsyncTask一定要在主线程中创建实例3.AsyncTask 的执行分为四个步骤,与前面定义的TaskListener类似。每一步都对应一个回调方法,需要注意的是这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。在任务的执行过程中,这些方法被自动调用4.* onPreExecute() 当任务执行之前开始调用此方法,可以在这里显示进度对话框。 * doInBackground(Params...) 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress...)来更新任务的进度。 * onProgressUpdate(Progress...) 此方法在主线程执行,用于显示任务执行的进度。 * onPostExecute(Result) 此方法在主线程执行,任务执行的结果作为此方法的参数返回。 能问个小问题不?手机摄像头驱动在哪个位置放着? 请问关于蓝牙的问题 求助:为什么异常捕捉这么慢? 为什么我设置的scrollview没有生效? 关于Android开发中程序调试的问题 [求助]调试报错求助 用什么方法可以画出简单的excel表格的效果,每个单元格都有边框 edittext被弹出来的键盘挡住了 背景 不能全屏 android中创建组件的两种方式 Android环境搭建 学习Android的步骤!比如mvc 先v在c后m,一步一步,求总结!越详细越好!
super.onCreate(savedInstanceState);
setContentView(R.layout.main); mStart = (Button)findViewById(R.id.start);
mThread1 = new Thread(new Runnable() {
public void run() {
while(true){
Log.i("Young", "mThread1");
}
}
});
mThread2 = new Thread(new Runnable() {
public void run() {
while(true){
Log.i("Young", "mThread2");
}
}
});
mStart.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
mThread2.start();
}
});
mThread1.start();
}我是这么来做的,结果是正常打印语句。
楼主在启动B时,使用的B.start(),还是B.run()的方法呢?
上面说过了,是ui子类的, 看看sdk怎么描述的吧,楼上的某位不会看不懂subclassed是什么意思吧 AsyncTask must be subclassed to be used. The subclass will override at least one method
方法就行了
问题:只有等子线程(这个线程不涉及任何UI操作)运行结束后,才能改变主Activity的组件
我的解决方法:把子线程(这个线程不涉及任何UI操作)也写成AsyncTask,在android1.6和2.1测试通过,但在android1.5又是只有等子线程(这个线程不涉及任何UI操作)运行结束后,才能改变主Activity的组件。
请问有方法在android1.5,1.6,2.1都可以解决这个问题的方法吗
2.需要注意的是AsyncTask一定要在主线程中创建实例
3.AsyncTask 的执行分为四个步骤,与前面定义的TaskListener类似。每一步都对应一个回调方法,需要注意的是这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。在任务的执行过程中,这些方法被自动调用
4.* onPreExecute() 当任务执行之前开始调用此方法,可以在这里显示进度对话框。
* doInBackground(Params...) 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress...)来更新任务的进度。
* onProgressUpdate(Progress...) 此方法在主线程执行,用于显示任务执行的进度。
* onPostExecute(Result) 此方法在主线程执行,任务执行的结果作为此方法的参数返回。