Android多线程基础实例

来源:互联网 发布:sql 查看表约束 编辑:程序博客网 时间:2024/05/22 03:37

最近在学习Android编程中遇到一个系统错误:android.os.NetworkOnMainThreadException,按字面意思理解就是在主线程上进行网络操作。既然不能在主线程上操作,那就在子线程上进行啊。由于之前没有写过java程序,于是就写了一个demo来进行测试,最终完成如下:

实现目的:

    点击按钮,Textview显示ID值(ID值一秒更新一次);

界面:

    一个Textview(我直接使用的helloworld的Textview)

    一个Button

实现:

    1、设置按钮监听:

button.setOnClickListener(new buttonOnclickListener());

    2、监听(通过内部类实现):

public class buttonOnclickListener implements OnClickListener {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button:isRunning=!isRunning;changeID();}}}

3、实现方法(changeID()):

private void changeID(){Toast.makeText(getApplicationContext(), isRunning.toString(), Toast.LENGTH_SHORT).show();new Thread(){@Overridepublic void run(){try {while(isRunning){Thread.currentThread().sleep(1000);if (i<5000){i+=1;}else {i=0;}Message msg=new Message();msg.what=0;msg.obj=i;mHandler.sendMessage(msg);}} catch (Exception e) {e.printStackTrace();}}}.start();}


4、线程通信

private Handler mHandler=new Handler(){public void handleMessage(Message msg){String string=msg.obj.toString();textView.setText(string);}};


5、运行界面如下:

点击按钮前

点击按钮后

6、完整代码如下:

package com.example.threaddemo;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {private Button button;private TextView textView;private Boolean isRunning=false;//private Handler mHandler=new Handler();private int i;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=(Button)findViewById(R.id.button);textView=(TextView)findViewById(R.id.txt_hello);button.setOnClickListener(new buttonOnclickListener());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}private void changeID(){Toast.makeText(getApplicationContext(), isRunning.toString(), Toast.LENGTH_SHORT).show();new Thread(){@Overridepublic void run(){try {while(isRunning){Thread.currentThread().sleep(1000);if (i<5000){i+=1;}else {i=0;}Message msg=new Message();msg.what=0;msg.obj=i;mHandler.sendMessage(msg);}} catch (Exception e) {e.printStackTrace();}}}.start();}private Handler mHandler=new Handler(){public void handleMessage(Message msg){String string=msg.obj.toString();textView.setText(string);}};public class buttonOnclickListener implements OnClickListener {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button:isRunning=!isRunning;changeID();}}}}



 

 

 

原创粉丝点击