我试图通过使用线程和线程类的sleep方法在执行另一个活动之后执行一个活动。
这是代码,

package com.example.admin.myapplication;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends ActionBarActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layo);
        Thread th=new Thread() {
            public void run()
            {
                try
                {

                    Thread.sleep(3000);
                }
                catch(InterruptedException i)
                {
                    i.printStackTrace();
                }
                finally
                {
                    Intent io=new Intent("com.example.admin.myapplication.NEWATTEMPT");
                    startActivity(io);
                }
            }

        };
        th.start();

    }



layo.xml的代码是-


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:background="@drawable/pic">

</LinearLayout>


而NewAttempt是另一个Java类-

我的问题是
在第MainActivity的16,我将内容设置为layo.xml,然后创建线程类的实例并启动它,
但是,如果我将setContentView(R.layout.layo)放在try块中,然后在启动应用程序时显示错误。为什么这样?有人可以解释为什么吗?

有人可以解释一下如何在android中执行吗,即读取文件的顺序?我是Android的初学者,我对控件如何从一个活动流向另一个活动一无所知?

最佳答案

每当您要在Activity中修改视图时,都需要在activity(ui)线程上进行修改。 UI线程已同步。活动具有可以处理您的Runnable的方法

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            //your method that modify view
        }
    });


就您而言,您可以将方法放在线程内部

    Thread th = new Thread() {
        public void run()
        {
            try
            {
                MainActivity.this.runOnUiThread(new Runnable() {
                   @Override
                   public void run() {
                      //your method that modify view
                      MainActivity.this.setContentView(R.layout.layo);
                   }
                });
                Thread.sleep(3000);
            }
            catch(InterruptedException i)
            {
                i.printStackTrace();
            }
            finally
            {
                Intent io = new Intent("com.example.admin.myapplication.NEWATTEMPT");
                startActivity(io);
            }
        }

    };
    th.start();

07-28 03:33