当前位置: 首页 > 面试题库 >

在Android中运行新线程和UI线程的方式是什么?

劳和雅
2023-03-14
问题内容

据我所知,在android中,当我们运行进程时,它们始于Main线程。当我们做一些繁重的工作时,我们使用了一个新线程。如果我们想修改UI外观,可以使用在UI上运行。

有人可以向我解释这些线程的作用以及如何使用它们吗?


问题答案:

UI线程和主线程只是同一线程的不同名称。

应用程序的所有UI膨胀都在此主线程上完成。之所以将“较重”的工作委派给其他线程,是因为我们不希望这些操作减慢UI的响应性和膨胀时间。

您将要运行任何更改UI或修改UI在主线程上使用的对象的操作。

一个带有AsyncTask的例子

package com.wolfdev.warriormail;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;

public class LoginActivity extends Activity implements OnClickListener{
    private Button loginButton;
    private EditText eText;
    private EditText pText;
    private CheckBox box;
    private String user; 
    private String pass;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

            //Initialize UI objects on main thread
        loginButton = (Button) findViewById(R.id.button1);
        loginButton.setOnClickListener(this);
        eText = (EditText) findViewById(R.id.editText1);
        pText = (EditText) findViewById(R.id.editText2);
        eText.clearFocus();
        pText.clearFocus();
        Animation fadeIn = AnimationUtils.loadAnimation(this,R.anim.fadeanimation);
        Animation slideIn = AnimationUtils.loadAnimation(this, R.anim.slideanimation);
        eText.startAnimation(slideIn);
        pText.startAnimation(slideIn);
        box = (CheckBox)findViewById(R.id.checkBox1);
        box.startAnimation(fadeIn);
        login.startAnimation(fadeIn);
    }

    @Override
    public void onClick(View v) {
        user = email.getText().toString();
        password = pass.getText().toString();

    }

    class LoginTask extends AsyncTask<Void,Void,Void>{
            @Override
            protected Void doInBackground(Void... args){
                    /* Here is where you would do a heavy operation
                    *  In this case, I want to validate a users
                    *  credentials.  If I would do this on the main
                    *  thread, it would freeze the UI.  Also since
                    *  this is networking, I am forced to do this on
                    *  a different thread.
                    */

                    return null;
            }

            @Override
            protected void onPostExecute(Void result){
                     /* This function actually runs on the main
                     * thread, so here I notify the user if the
                     * login was successful or if it failed.  If
                     * you want update the UI while in the background
                     * or from another thread completely, you need to
                     * use a handler.
                     */
            }
    }
}


 类似资料:
  • 问题内容: 我刚刚开始进行android开发,并且更新UI确实使我很烦:/ 到目前为止,这是我一直在努力的工作- 它工作正常,但是每个人都说要在主线程中做图形,所以我正在尝试(但失败)将其传递给另一个线程。麻烦的是,我真的不知道怎么做,因为我从未真正使用过线程。 Google给出的有关使用Threads的示例似乎并不十分清楚,我也无法真正按照自己的意愿去做。我可以请某人在这里给我一个最基本的例子,

  • 本文向大家介绍详解Android中OkHttp3的例子和在子线程更新UI线程的方法,包括了详解Android中OkHttp3的例子和在子线程更新UI线程的方法的使用技巧和注意事项,需要的朋友参考一下 okHttp用于android的http请求。据说很厉害,我们来一起尝尝鲜。但是使用okHttp也会有一些小坑,后面会讲到如何掉进坑里并爬出来。 首先需要了解一点,这里说的UI线程和主线程是一回事儿。

  • 在UI线程中运行代码的观点中,以下两者之间有什么区别吗: 或 而且

  • 我正在编写一个Android应用程序,它连接到蓝牙设备,读取设备发送的数据,将其添加到AChartEngine图形中,并在文本视图中显示数据。 我的Bluetooth代码与BluetoothChat示例代码中的线程实现非常相似(它与SDK一起提供)。我可以在LogCat中看到< code>ConnectedThread循环正在执行并因此获得新数据,但我的TextView在7行之后停止更新,图形间歇

  • 虽然这个问题似乎已经被问了很多次,而且我已经得到了很高的答案,但我想指出,多个答案是相互冲突的,而且我永远无法完全理解异步代码的内部结构。我完全理解它的意思是继续顺序代码执行并在以后完成任务,我正在努力理解后面的部分。 答案1-建议UI/Main 首先,这个问题包含了下面的测试,建议异步代码运行在main/UI线程上,并链接了一篇文章,解释为什么异步代码没有其他线程。 问:“在我看来,由于我主要做

  • 我有一个ScheduleTimer类,它可以处理日期数组。这是: 如果我像Java应用程序一样运行它,而不是像android一样运行,并且它在控制台中每隔一秒打印一次,那么它就可以正常工作。但是当在android环境中运行它时,它要么说UI线程不能从任何其他线程接触,要么它在类ScheduleTimer的方法中给了我null点异常。 我这样使用它: