当前位置:  编程技术>移动开发
本页文章导读:
    ▪Java线程池种ThreadPoolExecutor浅析        Java线程池类ThreadPoolExecutor浅析 线程池的特点是将任务的提交和执行分开。这样做的好处是,能使处理器尽量多地同时执行任务。为此,线程池提供了两个角色:任务 task执行任务的工人 wo.........
    ▪ [转]dip有关问题        [转]dip问题 Android主要有以下几种屏:   QVGA和WQVGA屏density=120;   HVGA屏density=160;   WVGA屏density=240;     上面意思表示 此种屏幕的1个dp对应多少   EX:WVGA屏density=240; 1个dp对应240;     既:.........
    ▪ SoundPool音效播发       SoundPool音效播放 1. 需要把音效文件放入/res/raw/文件夹下      音频文件看附件2. 看例子package com.sound; import android.app.Activity; import android.media.AudioManager; import android.media.SoundPool; import android.os..........

[1]Java线程池种ThreadPoolExecutor浅析
    来源: 互联网  发布时间: 2014-02-18
Java线程池类ThreadPoolExecutor浅析
线程池的特点是将任务的提交和执行分开。这样做的好处是,能使处理器尽量多地同时执行任务。

为此,线程池提供了两个角色:
任务 task
执行任务的工人 worker

与此相关,需要考虑:

工人的数量:
工人数量的考量是线程池设计的一个关键。因此,这一点由构造线程池时,提供的头两个参数决定。
最小雇佣数量 corePoolSize
最多工人数量 maximumPoolSize

何时解雇多余最小雇佣数量的工人:
工人多余任务时,它们会等待任务的到来,如果规定时间内,还没有任务,那我们就解雇多余的工人。
这个规定的时间就是构造子里的第三,第四个参数。


能接受的任务数量:
一个工人,某一时间只能处理一个任务。工人的数量是有限的,因此多余工人数量的任务来了时:
线程池就要考虑是否接受
Y:
处于等待中的任务堆积到多少就不再允许接受任务 :
规定等待任务列表的容量[bound],达到容量后不再接受新任务。

无限制地接受等待任务[unbound]
设置何种任务等待列表由构造子的第五个参数决定。
long keepAliveTime, TimeUnit unit

N:
以何种方式拒绝:
由构造子的第七个参数决定。

第六个参数决定了
工人手里执行任务线程的工厂方法。


1.当工人数量没有达到最小雇佣数量时,每当任务来临,线程池都要创建一个工人,然后从线程工厂里创建一个新的线程,把任务作为该线程的target,把线程交给工人,把工人加入工人集合。该任务随即被执行。

2.如果任务来临时,当前工人数量poolSize已经大于最小雇佣数量,表明工人已经雇佣的差不多了,先让任务等待吧。
线程池尝试把任务加入任务列表,如果成功,任务提交的步骤就结束了。

2.5.任务列表是并发阻塞队列,工人会不断地尝试从队列里获取任务,如果获取到任务(请看5),工人就把任务拿去执行。这是任务的执行步骤。

3.如果加入队列失败,说明任务列表已经满了,不能再往里塞任务了。
这时,线程池判断工人数量是否达到最多工人数量。
如果还没有,则决定再雇佣一个工人(这和开始雇佣工人的步骤没有两样)。

4.如果已经达到雇佣上线,线程池没有办法了,只好拒绝该任务。
拒绝的方式有:
1、抛出异常给任务递送者,告诉他“老子累屁了,老子真的不干了”。 --这太粗暴了。线程池默认就这么干!
2、偷蔫儿地丢弃这个任务。 --这太猥琐了。
3、从任务列表里丢弃一个最近的任务,然后把这个任务放里。--这太势利眼了。
4、还给任务递送者,让他自己干。--这太无耻了。

5.线程池让工人等待任务的策略分两种(本文不考虑生命周期和状态):
死等!当工人数量少于或者等于最低雇佣数量时,它们没啥任务干了,就必须死等。
如果在给定时间内,没有任务来到,线程池开始数人头,如果不多于最低雇佣数量,这个工人还得重新等一个给定时间那么长。

6.否则,线程池把该工人的线程结束,告诉当前等待的工人,你没有任务了。不要再等了。

7.没有拿到任务的工人,被清除出工人集合--该工人正式下岗。

    
[2] [转]dip有关问题
    来源: 互联网  发布时间: 2014-02-18
[转]dip问题

Android主要有以下几种屏:

 

QVGA和WQVGA屏density=120;

 

HVGA屏density=160;

 

WVGA屏density=240;

 

 

上面意思表示 此种屏幕的1个dp对应多少

 

EX:WVGA屏density=240; 1个dp对应240;

 

 

既:

如果:WVGA屏设置density=120时(每个像素px显示120) 此时每个dp对应 240/120=2个px;

如果:WVGA屏设置density=240时(每个像素px显示240) 此时每个dp对应 240/240=1个px;

如果:WVGA屏设置density=480时(每个像素px显示480) 此时每个dp对应 240/480=0.5个px;

 

所以:

每个dp对应多少 由屏幕决定

每个像素显示对少由系统设置

 

下面以480dip*800dip的WVGA(density=240)为例,详细列出不同density下屏幕分辨率信息:

 

当density=120时 屏幕实际分辨率为240px*400px (两个点对应一个分辨率)

状态栏和标题栏高各19px或者25dip

横屏是屏幕宽度400px 或者800dip,工作区域高度211px或者480dip

竖屏时屏幕宽度240px或者480dip,工作区域高度381px或者775dip

 

density=160时 屏幕实际分辨率为320px*533px (3个点对应两个分辨率)

状态栏和标题栏高个25px或者25dip

横屏是屏幕宽度533px 或者800dip,工作区域高度295px或者480dip

竖屏时屏幕宽度320px或者480dip,工作区域高度508px或者775dip

 

density=240时 屏幕实际分辨率为480px*800px (一个点对于一个分辨率)

状态栏和标题栏高个38px或者25dip

横屏是屏幕宽度800px 或者800dip,工作区域高度442px或者480dip

竖屏时屏幕宽度480px或者480dip,工作区域高度762px或者775dip

 

apk的资源包中,当屏幕density=240时使用hdpi标签的资源

当屏幕density=160时,使用mdpi标签的资源

当屏幕density=120时,使用ldpi标签的资源。

不加任何标签的资源是各种分辨率情况下共用的。

建议:布局时尽量使用单位dip,少使用px。

 

device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。

 


    
[3] SoundPool音效播发
    来源: 互联网  发布时间: 2014-02-18
SoundPool音效播放
1. 需要把音效文件放入/res/raw/文件夹下
      音频文件看附件

2. 看例子
package com.sound;

import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;

public class SoundPoolActivity extends Activity {
	private SoundPool sound;
	private int hit;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        /**
         * 	第一个参数指定音频池的最大音频流数目为10
        	第三个参数,声音品质为5
        */
        sound = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);
        hit = sound.load(this, R.raw.color, 0);
    }
    
    public void play(View v){
    	/**
    	 * 参数:
    	 * 	播放音频,可以对左右音量分别设置,可以设置优先级,循环次数以及速率
    		soundID, leftVolume, rightVolume, priority, loop, rate
    		速率最高2,最低0.5,正常为1
    	*/
    	sound.play(hit, 1, 1, 0, 0, 1);
    }
}

    
最新技术文章:
▪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