我试图通过使用线程和线程类的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();