android编程之多线程编程实例分析

本文实例讲述了android编程之多线程编程实现方法。分享给大家供大家参考。具体分析如下:

该功能与前面《android开发socket编程之udp发送实例分析》中一样,当按下键后,发送文本框中数据给PC。不同的是把发送数据的功能放在一个线程socket_send中。

一、环境:

win7 + eclipse + ndk

二、代码:

主类test_socket.java

package test.soket;
//import com.test_button.R;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class test_socket extends Activity {
 public static TextView show;
 public static Button press;
 public static boolean flag;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  //开辟控件空间
  show = (TextView)findViewById(R.id.editText1);
  press = (Button)findViewById(R.id.button1);
  flag = false;
  soket_send thread = new soket_send();
  thread.init();
  thread.start();
  press.setOnClickListener(new Button.OnClickListener()
  {
   @Override
   public void onClick(View v)
   {
    flag = true;
   }
  });
 }
}

线程类socke_sendt.java:

package test.soket;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.LinkedList;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.util.Log;
public class soket_send extends Thread
{
 private static final int MAX_DATA_PACKET_LENGTH = 40;
 private byte[] buffer = new byte[MAX_DATA_PACKET_LENGTH];
 private DatagramPacket dataPacket;
 private DatagramSocket udpSocket;
 public void init()
 {
  try
  {
   udpSocket = new DatagramSocket(5554);
  }
  catch (SocketException e)
  {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  dataPacket = new DatagramPacket(buffer, MAX_DATA_PACKET_LENGTH);
  String str = "hello,jdh"; //这是要传输的数据
  byte out [] = str.getBytes(); //把传输内容分解成字节
  dataPacket.setData(out);
  dataPacket.setLength(out.length);
  dataPacket.setPort(5554);
  try
  {
   InetAddress broadcastAddr = InetAddress.getByName("192.168.0.248");
   dataPacket.setAddress(broadcastAddr);
   udpSocket.send(dataPacket);
  }
  catch (IOException e)
  {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public void run()
 {
  while (true)
  {
   if (test_socket.flag)
   {
    //获得输入框文本
    CharSequence str =test_socket.show.getText();
    byte out[] = str.toString().getBytes();
    dataPacket.setData(out);
    dataPacket.setLength(out.length);
    try
    { 

     InetAddress broadcastAddr = InetAddress.getByName("192.168.0.248");
     dataPacket.setAddress(broadcastAddr);
     udpSocket.send(dataPacket);
    }
    catch (IOException e)
    {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    test_socket.flag = false;
   }
  }
 }
}

注意:程序中采用的线程间通信的方法是把需要共享的变量设置成public属性

希望本文所述对大家的Android程序设计有所帮助。

(0)

相关推荐

  • android 自定义控件 自定义属性详细介绍

    自定义控件在android中无处不见,自定义控件给了我们很大的方便.比如说,一个视图为imageview ,imagebutton ,textview 等诸多控件的组合,用的地方有很多,我们不可能每次都来写3个的组合,既浪费时间,效率又低.在这种情况下,我们就可以自定义一个view来替换他们,不仅提升了效率并且在xml中运用也是相当的美观. 一.控件自定义属性介绍 以下示例中代码均在values/attrs.xml 中定义,属性均可随意命名. 1. reference:参考某一资源ID. 示例:

  • Android中创建多线程管理器实例

    如果你要反复执行一个任务,用不同的数据集(参数不同),但一次只要一个执行(任务是单线程的),IntentService符合你的需求.当需要在资源可用时自动执行任务,或允许多任务同时执行,你需要一个线程管理器管理你的线程.ThreadPoolExecutor,会维护一个队列,当它的线程池有空时,从队列里取任务,并执行.要运行任务,你要做的就是把它加到队列里. 线程池可以并联运行一个任务的多个实例,所以你要保存代码线程安全.能被多线程访问的变量需要同步块.更多信息,见Processes and Th

  • Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例

    本文实例讲述了Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能的方法.分享给大家供大家参考,具体如下: 1.布局界面 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pare

  • android 多线程技术应用

    多线程案例--计时器 这个案例中,屏幕启动之后,进入如图所示的界面. 屏幕上有一个文本框用于显示逝去的时间,此外还有一个"停止计时"按钮.案例的用例图如图所示.  能够在屏幕上"实时地显示"时间的流逝,单线程程序是无法实现的,必须要多线程程序才可以实现,即便有些计算机语言可以通过封装好的类实现这一功能,但从本质上讲这些封装好的类就是封装了一个线程. 综上所述,完成本案例用到的知识及技术如下: 1)进程和线程的概念; 2)Java中的线程,在Java中创建线程的方式;

  • 使用Android自定义控件实现滑动解锁九宫格

    本文概述:  滑动解锁九宫格的分析: 1.需要自定义控件: 2.需要重写事件onTouchEvent(); 3.需要给九个点设置序号和坐标,这里用Map类就行: 4.需要判断是否到滑到过九点之一,并存储滑到过的点的序号,而且需要一个方法可以返回它们,这里用List类就行: 滑动解锁当前还是比较流行的,今天写了个简单的滑动解锁九宫格的例程,分享出来让初学者看看. 我的是这样的: Demo 首先,自定义一个View /** * 九宫格 */ public class NineGridView ext

  • Android编程之canvas绘制各种图形(点,直线,弧,圆,椭圆,文字,矩形,多边形,曲线,圆角矩形)

    本文实例讲述了Android编程之canvas绘制各种图形的方法.分享给大家供大家参考,具体如下: 1.首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into

  • Android 中 EventBus 的使用之多线程事件处理

    在这一系列教程的最后一篇中,我想谈谈GR的EventBus,在处理多线程异步任务时是多么简单而有效. AsyncTask, Loader和Executor-- 拜托! Android中有很多种执行异步操作的方法(指平行于UI线程的).AsyncTask对于用户来说是最简单的一种机制,并且只需要少量的设置代码即可.然而,它的使用是有局限的,正如Android官方文档中所描述的: AsyncTask被设计成为一个工具类,在它内部包含了Thread和Handler,但它本身并不是通用线程框架的一部分.

  • Android中的Handler与多线程应用实例

    本文首先解释一下handler是用来干嘛的,然后通过例子介绍其在多线程中的应用. 什么是Handler handler通俗一点讲就是用来在各个进程之间发送数据的处理对象.在任何进程中,只要获得了另一个进程的handler则可以通过handler.sendMessage(message)方法向那个进程发送数据.基于这个机制,我们在处理多线程的时候可以新建一个thread,这个thread拥有UI线程中的一个handler.当thread处理完一些耗时的操作后通过传递过来的handler像ui线程发

  • Android编程根据系列图片绘制动画实例总结

    本文实例讲述了Android编程根据系列图片绘制动画的方法.分享给大家供大家参考,具体如下: 一.采用系统提供的Animation类,用自带的方法 其中的animation.xml文件如下: <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@

  • Android SQLite3多线程操作问题研究总结

    最近做项目时在多线程读写数据库时抛出了异常,这自然是我对SQlite3有理解不到位的地方,所以事后仔细探究了一番. 1.关于getWriteableDataBase()和getReadableDatabase()的真正作用 getWriteableDataBase()其实是相当于getReadableDatabase()的一个子方法,getWriteableDataBase()是只能返回一个以读写方式打开的SQLiteDatabase的引用,如果此时数据库不可写时就会抛出异常,比如数据库的磁盘空

随机推荐