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();}}}}
- Android多线程基础实例
- java基础-多线程实例
- Android多线程下实例
- java多线程基础实例代码
- android 多线程基础
- Android sqlite 基础实例
- Android Socket 基础 & 实例
- android基础--ProgressBar实例
- Android绘画基础实例
- Android TTS基础实例
- Android TTS基础实例
- Android Handler Message多线程实例
- Android Handler Message多线程实例
- Android Handler Message多线程实例
- Android Handler Message多线程实例
- Android Handler Message多线程实例
- Android Handler Message多线程实例
- android多线程讲解与实例
- SimpleOnGestureListener//简单手势监听
- "应用程序无法正常启动0xc000007b"的一个解决办法
- 需求开发之愿景分析
- 那天有个小孩跟我说LINQ(一)
- MPEG2_TS(二)-PCR控制发送速度原理
- Android多线程基础实例
- 获取整个页面文档的大小
- Kdevelop使用
- 轻松掌握抽象类
- MVC4,MVC3,VS2012+ entity framework Migration from Sqlserver to Mysql
- 那天有个小孩跟我说LINQ(二)
- 【九度】题目1117:整数奇偶排序
- 获取由于滚动条的拖动而卷走的部分的大小
- Java NIO Channel to Channel Transfers