Android 中的线程和并行性

Posted

技术标签:

【中文标题】Android 中的线程和并行性【英文标题】:Threading and parallelism in Android 【发布时间】:2020-08-16 02:54:33 【问题描述】:

我对 android 开发非常陌生。谁能帮我解决这个问题,我不知道为什么它可以完美运行,尽管我正在从工作线程更新我的TextView。 当我说完美工作时,我的意思是 TextView 显示值计数没有任何问题。 所以,我的问题是 - “是否真的可以从后台线程更新 UI,如果没有,我错了”

public class MainActivity extends AppCompatActivity 
    TextView textView ;
    private int count;
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textview);
        btn = findViewById(R.id.startbtn);
        btn.setOnClickListener(new View.OnClickListener()
            @Override
            public void onClick(View v) 
                listen();
            
        );
    

    public void listen()
        new Thread(new Runnable() 
            @Override
            public void run()  
                long time = System.currentTimeMillis();
                while(System.currentTimeMillis()<=time +10000) 
                    count++;
                
                textView.setText(count+"");
            
        ).start();
    

【问题讨论】:

【参考方案1】:

使用

runOnUiThread(new Runnable() 

                        @Override
                        public void run() 
                            // Add UI code here

                        
                    );

所有 UI 更新都应该在主线程上完成。

【讨论】:

但是为什么 UI 是在没有 runOnUiThread 方法的情况下从后台线程更新的。这是否意味着,我们可以从后台线程更新 UI。

以上是关于Android 中的线程和并行性的主要内容,如果未能解决你的问题,请参考以下文章

Swift 和 Android 之间的 UI 并行性

Android中的线程状态 - AsyncTask详解

Android面试收集录7 AsyncTask详解

Android 3g下载和多线程

6Java并发性和多线程-并发性与并行性

boost::thread 的线程管理和并行性