在android 中我们一般用 Handler 做主线程 和 子线程 之间的通信 。

现在有了一种更为简洁的写法,就是 Activity 里面的 runOnUiThread( Runnable )方法。

利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。

Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程。
package com.app;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建一个线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                //延迟两秒
                try {
                    Thread.sleep( 2000 );
                } catch (InterruptedException e) {
                    e.printStackTrace();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, "hah", Toast.LENGTH_SHORT).show();
        }).start();

 Activity的runOnUiThread(Runnable)

* Runs the specified action on the UI thread. If the current thread is the UI * thread, then the action is executed immediately. If the current thread is * not the UI thread, the action is posted to the event queue of the UI thread. * @param action the action to run on the UI thread public final void runOnUiThread(Runnable action) { if (Thread.currentThread() != mUiThread) { mHandler.post(action); } else { action.run(); 在android 中我们一般用 Handler 做主线程 和 子线程 之间的通信 。现在有了一种更为简洁的写法,就是 Activity 里面的 runOnUiThread( Runnable )方法。 利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.run
方法一:Activity.runOnUiThreadRunnable )(经验之道: 这个最好用, 凡是要刷新页面的地方,Activity.runOnUiThread( new Runnable()    { public void run(){更新UI}});方法二:子线程调用Handler的sendMessage(message)发送事件。 代码如下:mHandler = new Handler() {     @Override     public void handleMessage(Message msg) {          //操作界面         myText.set
我们知道在Android开发中不能在非ui线程中更新ui,但是,有的时候我们需要在代码中执行一些诸如访问网络、查询数据库等耗时操作,为了不阻塞ui线程,我们时常会开启一个新的线程(工作线程)来执行这些耗时操作,然后我们可能需要将查询到的数据渲染到ui组件上,那么这个时候我们就需要考虑异步更新ui的问题了。 android中有下列几种异步更新ui的解决办法: Activity.runOnUiThread(Runnable) View.post(Runnable) long) View.postDelayed(Runnable, long) 使用handler(线程间通讯)
闪屏页也称之为欢迎页。在打开一个App时,我们第一眼看到的往往是一个闪屏页面,之所以叫闪屏页,是因为它出现之后会短暂地停留几秒钟再跳转到其他页面。闪屏页除了使用户体验更好外,还能给app留出初始化数据的时间。下面,是我总结的闪屏页的三种写法。 打开Android Studio,新建一个projectMyStudy,新建一个SplashActivity并在清单文件中将其设置为启动Activity。在布局文件中将SplashActivity的背景设置为一张图片(可以是手机壁纸)。 <?xml version=1.0 encoding=utf-8?> <RelativeLayou
所以我们要通过其他方式来动态改变ui视图, 1、runOnUiThread activity提供的一个轻量级更新ui的方法,在Fragment需要使用的时候要用getActivity.runOnUiThread开启线程 这种方法最简单,方便更新一些不需要判断的通知,比如在聊天项目中动态获取未读消息数量。 runOnUiThread(new Runnable() { @Override public void run() { sendMessage([自动回复]你好,我是机器人);
Android开发的过程中,主线程主要来完成UI绘制和响应用户的操作,默认情况下,我们大部分的代码都是在主线程 中执行的,因此我们时刻要考虑主线程的情况。我们都知道要开启一个子线程来完成一个耗时操作,以避免阻塞主线程影响 用户体验,甚至ANR。但是子线程执行完要更新UI的时候,我们又必须回到主线程来更新,实现这一功能常用的方法是执行 ActivityrunOnUiThread()方法runOnUiThread(new Runnable() { void run() { // do something
首先runOnUiThreadActivity内部的方法,在运用的时候最好指明当前环境变(Context). new Thread(new Runnable() {    @Override    public void run() {     System.out.println(Thread.currentThread().getId());     runOnUiThread(n
利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable). Runnable对像就能在ui程序中被调用。 * Runs the specified action on the UI thread. If the ...
Android中我们不在子线程中操作UI,但是如果非要在子线程中操作完后实现对UI操作,这里的实现方法如下: mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { // 子线
static final int REFRESH_COMPLETE = 0X1112; private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { 1. 创建一个布局文件,其中包含ListView组件。 2. 创建一个自定义适配器,该适配器将在ListView中显示API数据。您可以使用BaseAdapter或ArrayAdapter来创建适配器。 3. 在您的代码中调用API并将返回的数据解析为您需要的格式。您可以使用HttpURLConnection或OkHttp等库来调用API。 4. 将解析的数据传递给您的自定义适配器,以便它可以在ListView中显示数据。 下面是一个简单的示例代码,演示如何在ListView中使用API数据: ```java public class MainActivity extends AppCompatActivity { private ListView mListView; private MyAdapter mAdapter; private List<String> mDataList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = findViewById(R.id.list_view); mAdapter = new MyAdapter(); mListView.setAdapter(mAdapter); //调用API并解析数据 fetchDataFromApi(); private void fetchDataFromApi() { //使用OkHttp库调用API OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://your-api-url.com/data") .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { //处理请求失败的情况 @Override public void onResponse(Call call, Response response) throws IOException { String responseData = response.body().string(); //解析数据 try { JSONArray jsonArray = new JSONArray(responseData); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String data = jsonObject.getString("data"); mDataList.add(data); //将数据传递给适配器 runOnUiThread(new Runnable() { @Override public void run() { mAdapter.setData(mDataList); } catch (JSONException e) { e.printStackTrace(); private class MyAdapter extends BaseAdapter { private List<String> mData; public void setData(List<String> data) { mData = data; notifyDataSetChanged(); @Override public int getCount() { return mData == null ? 0 : mData.size(); @Override public Object getItem(int position) { return mData.get(position); @Override public long getItemId(int position) { return position; @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item, parent, false); TextView textView = convertView.findViewById(R.id.text_view); textView.setText(mData.get(position)); return convertView; 在上面的示例代码中,我们使用OkHttp库调用API并将返回的数据解析为JSON格式。然后,我们将解析的数据传递给自定义适配器,并在ListView中显示数据。请注意,在这个示例代码中,我们在UI线程中更新适配器的数据,以确保ListView正确地显示数据。