您的位置:首页 > 产品设计 > UI/UE

Android(13)java中的线程回顾,Android线程,主线程(UI线程)

2015-11-22 17:01 531 查看
java 中的线程

class ThreadImp implements Runnable
{
public void run()
{
for(int i = 0;i<100 ; i++){
System.out.println("Runnable -> " + i);
}
}
}
class test
{
public static void main(String[] args){
//生成一个runnable 接口实现类的对象
//生成一个Thread类的对象并将Runnable接口实现类的对象作为参数传递给该Thread对象。
//通知Trhead对象执行start();
ThreadImp ti = new ThreadImp();
Thread t = new Thread(ti);
t.start();
}
}


//不常用,不建议方式

class FirstThread extends Thread
{
public void run()
{
for(int i = 0; i < 100;i++){
System.out.println("FirstThread" + i);
}
}
}
class test
{
public static void main(String args[]){
//创建线程
FirstThread ft = new FirstThread();
//start后进入到等待状态
ft.start();//千万不能这样写ft.run();这样是一个线程一个线程执行的,先是FirstThread从0-99然后main线程0-99
for(int i = 0;i<100;i++)
{
System.out.println("main" + i);
}
}
}


使用实现Runnable方法好处有两条:

:如果你的MyThread类已经继承了一个类,那么java中不允许多继承,这样让你的MyThread实现一个Runnable接口正好啊。

:如果同一个对象创建多线程那么共享一个数据成员index

例子:不要在非UI线程(主线程中)修改UI

报错:



代码:

public class MainActivity extends Activity {
private Button mButton;
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
mButton = (Button)findViewById(R.id.get_btn);
mTextView = (TextView)findViewById(R.id.show_tv);
ButtonChangedListener listener = new ButtonChangedListener();
mButton.setOnClickListener(listener);
}
//创建一个WorkThread
class MyThread extends Thread{
public void run(){
mTextView.setText("修改TextView内容");
try{
}catch(Exception e){
e.printStackTrace();
}
}
}
class ButtonChangedListener implements OnClickListener{

@Override
public void onClick(View arg0) {
MyThread thread = new MyThread();
thread.start();
}
}
}


可以在工作线程中修改UI的控件:ProgressBar

<?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:orientation="vertical" >
<Button
android:id="@+id/get_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="得到"/>
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"/>
</LinearLayout>


public class MainActivity extends Activity {
private Button mButton;
private ProgressBar mProgressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
mButton = (Button) findViewById(R.id.get_btn);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
ButtonChangedListener listener = new ButtonChangedListener();
mButton.setOnClickListener(listener);
}

// 创建一个WorkThread
class MyThread extends Thread {
public void run() {
for (int i = 0; i < 100; i++) {
mProgressBar.setProgress(mProgressBar.getProgress() + 1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

class ButtonChangedListener implements OnClickListener {

@Override
public void onClick(View arg0) {
MyThread thread = new MyThread();
thread.start();
}
}
}


在应用程序中,主线程用于接收用户输入,以及将运算的结果反馈给用户。所以说对于一些可能造成阻塞的操作,必须放在WorkThread.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: