当前位置:  编程技术>移动开发
本页文章导读:
    ▪除了小箭头        去掉小箭头 http://jingyan.baidu.com/article/47a29f241d933cc01523997e.html ......
    ▪ java邮件发送跟群发邮件        java邮件发送和群发邮件 java邮件发送   //邮件发送服务器 private static String HOST = "smtp.163.com"; //默认发送邮件 地址,用户名,密码  private static String FROM = "****@163.com";  private static String USERNAME .........
    ▪ 讯息机制细谈(message handler looper MessageQueue )【转】       消息机制细谈(message handler looper MessageQueue )【转】 消息机制细谈(message handler looper MessageQueue )   转自:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-5116.html   在handler的简单用法中,我们自己简.........

[1]除了小箭头
    来源: 互联网  发布时间: 2014-02-18
去掉小箭头

http://jingyan.baidu.com/article/47a29f241d933cc01523997e.html


    
[2] java邮件发送跟群发邮件
    来源: 互联网  发布时间: 2014-02-18
java邮件发送和群发邮件

java邮件发送

 

//邮件发送服务器

private static String HOST = "smtp.163.com";

//默认发送邮件 地址,用户名,密码
  private static String FROM = "****@163.com";

 private static String USERNAME = "*****";

 private static String PASSWORD = "****";

//发送都采用smtp

  TRANSPORT = "smtp";

 

// 邮件发送器
 public static boolean sysEmail(String link, String to) throws IOException {
  boolean success = false;
  try {

   Properties props = new Properties();

   props.put("mail.smtp.host", HOST);
   props.put("mail.smtp.auth", "true");

   Session mailSession = Session.getDefaultInstance(props, null);

   // MimeMessage message = new MimeMessage(session);
   mailSession.setDebug(true);

   Multipart mp = new MimeMultipart();
   MimeBodyPart mbp = new MimeBodyPart();
   // 将邮件内容以HTML的方式发送

   mbp.setContent(link, "text/html;charset=UTF-8");
   mp.addBodyPart(mbp);

   MimeMessage message = new MimeMessage(mailSession);
   message.setFrom(new InternetAddress(FROM));

   message.addRecipient(Message.RecipientType.TO, new InternetAddress(
     to));

   // message.addRecipients(Message.RecipientType.BCC, to);

   // System.out.println(props.getProperty(EMAIL_USERNAME));

   message.setSubject(EmailList.SUBJECT,"UTF-8");
   message.setContent(mp);
   message.saveChanges();

   Transport transport = mailSession.getTransport(TRANSPORT);
   transport.connect(HOST, USERNAME, PASSWORD);

   transport.sendMessage(message, message.getAllRecipients());
   transport.close();
   success = true;

  } catch (MessagingException e) {
   e.printStackTrace();
   success = false;
  }

  return success;
 }

 

 

 

 

群发的时候

message.addRecipients(Message.RecipientType.BCC, to);

to ="";邮件列表之间用逗号分割

可能发过多造成邮件发送不成功,此时考虑使用线程

 

 

有时候邮件显示发送成功,但在邮箱里边收不到,

有可能就是默认发送地址的问题,你把邮件默认发送地址改一下试试。

 


    
[3] 讯息机制细谈(message handler looper MessageQueue )【转】
    来源: 互联网  发布时间: 2014-02-18
消息机制细谈(message handler looper MessageQueue )【转】

消息机制细谈(message handler looper MessageQueue )

 

转自:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-5116.html

 

在handler的简单用法中,我们自己简单new出一个handler 然后调用它的sendMessage方法发出一条消息。然后在handler类重写了handler的handlerMessage方法来进行处理。看似就是这么简单的俩步,其实背后隐藏了很多我们不知道的流程。


   在介绍这个之前,我先介绍几个概念
  1。Message 这个应该很清楚吧 就是我们发送的消息 介绍一个里面的一个方法Message.obtain函数。作用是从Message Pool中取出一个Message,如果Message Pool中已经没有Message可取则新建一个Message返回,同时用对应的参数给得到的Message对象赋值。 message Pool 我的理解就是一个缓存区。就是把用过的Message放进这里面为了以后用而已。要不每次都要new一个message起步麻烦。这个应该跟String pool的原理一样。姑且我们把它视为同一个作用的东西。
2.MessageQueue
顾名思义就是消息队列,干什么用的 当然是存放消息用的
3。Looper
我暂且叫他循环体吧。 主要就是从MessageQueue中读取消息。
4.handler 当然就是处理发来的消息了

下面我就把这个四个联系起来,看看他们在内部到底怎么执行。
首先通过handler发出一条消息,发到哪呢 肯定是MessageQueue里,最终会调用MessageQueue的 enqueueMessage函数,enqueueMessage根据上面的接收的Message的队列的构造把接收到的Message放入队列中。MessageQueue的removeMessages函数根据上面的接收的Message的队列的构造把接收到的Message从队列中删除,并且调用对应Message对象的recycle函数把不用的Message放入Message Pool中。通过Loop从MessageQueue中从前往后取出Message,然后通过Handler的dispatchMessage函数进行消息的处理(可见消息的处理是Handler负责的),消息处理完了以后通过Message对象的recycle函数放到Message Pool中,以便下次使用,通过Pool的处理提供了一定的内存管理从而加速消息对象的获取。至于如何处理就看你的handler如何定义了由你指定(三个方法,优先级从高到低:Message里面的Callback,一个实现了Runnable接口的对象,其中run函数做处理工作;Handler里面的mCallback指向的一个实现了 Callback接口的对象,里面的handleMessage进行处理;处理消息Handler对象对应的类继承并实现了其中 handleMessage函数,通过这个实现的handleMessage函数处理消息)。
 
  大致流程就是
  • handler------->>发送message---->>MessageQueue
  • Looper--->取出message从messagequeue中----->>在触发handler的消息分发函数----调用handler中定义的方法.

  • 这里有个疑问那looper 和messagequeue什么时候生成呢。其实messagequeue在Looper创建的时候就生成了。那Looper什么时候生成呢?其实Looper是跟一个线程关联的。而主线程会自动调用prepareMainLooper生成自己的Looper,但其他线程则不会自己创建了。待会再说。
      先来看看我们上次的简单handler例子。这下应该知道他们内部的流程了吧。其实我们在Hander handler=new Handler();其实就已经把主线程的Looper关联上来了,有了Looper我们也就有了MessageQueue 所以我们在调用sendMessage的时候就把这个Message发送到由Looper创建的MessageQueue里。Looper有主线程创建的,当然消息会在主线程处理了。这样就实现了简单的子线程到主线程的通信了。
    那好,如果现在我要创建子线程的Looper呢 然后怎么把这个Looper绑定Handler上呢。其实很简单 在子线程调用Looper.prepare()就可以创建子线程的Looper 然后通过Looper.myLooper()就可以拿到这个Looper对象,最后就是把这个Looper 跟Handler绑定起来。其实在构建handler对象的时候我们除了我默认无参构造方法(这个就是我们上次那个例子用的)还有有参的构造方法,就是传Looper的。好了,这样就可以把Looper跟Handler绑定起来了。这你在主线程调用Handler.sendMessage就是把message发到子线程里来了。这样就实现主线程到子线程的通信了。以此类推各种样式的通信都是可以的。大家回去不妨试一下。


        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3