当前位置:  编程技术>移动开发
本页文章导读:
    ▪将App客户端公布到App Store中的总体思路流程        将App客户端发布到App Store中的总体思路流程  1.前期准备工作   1)要发布iOS应用程序到App Store首先需要一个iOS developer帐号,账号是收费的(注册Developer账户这里就不介绍了)。 2)当然.........
    ▪ 基于TCP跟UDP的聊天功能的实现        基于TCP和UDP的聊天功能的实现    这里类似于登陆功能的实现,是基于UDP实现的,而聊天的内容,是基于TCP实现的,大概流程是:     建立一个服务端:    下面是UDP开启服务器返回给客户.........
    ▪ EMMC与RAND的差异       EMMC与RAND的区别作者:Younger Liu, 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。   EMMC与RAND的区别 说到两者的区别,必须从flash的发展历程说起.........

[1]将App客户端公布到App Store中的总体思路流程
    来源: 互联网  发布时间: 2014-02-18
将App客户端发布到App Store中的总体思路流程
1.前期准备工作

  1)要发布iOS应用程序到App Store首先需要一个iOS developer帐号,账号是收费的(注册Developer账户这里就不介绍了)。

2)当然是将App程序开发好了,并且已经在模拟器(Simulator)中做了全面的测试。

2.准备工作做好之后,就可以发布应用到App Store了,应用发布概括起来需要以下几个步骤:

1). 注册App ID,在Xcode中指定Bundle Identifier

2). 创建发布证书(Distribution Certificate)

3). 创建Distribution Provisioning Profile

4). 用Distribution Profile为应用签名

5). 打包App

6). 在iTunes Connect上传App

以上大部分的操作是在Provisioning Portal、XCode、Keychain Access工具和iTunes Connect中完成的。

上传App必须在Xcode软件里执行(也就是要有MacAir, MacMini等运行Moc OS X Mountain等10.x的系统)。

其他操作都可以在普通浏览器里完成。

      1).发布iOS应用程序到App Store - 创建App ID

首先给iOS应用程序申请一个App ID,它是你的应用程序的唯一标识。登录iOS Developer网站,点击右侧的iOS Provisioning Portal链接,选择App ID。

选择创建新app ID。在Description中输入应用的描述信息。Bundle Identifier是指应用的代码标识,你可以用公司名.应用名来标识,例如:com.company.demoapp。

然后打开X-Code,选择Target > Summary。在Identifier输入框中输入上面注册的Bundle Identifier。

     2).发布iOS应用程序到App Store - 创建Distribution Certificate

iOS应用都有一个安全证书用于验证开发者身份和签名。在Provisioning Portal的Distribution栏目下有详细介绍,但总体可以归纳为以下步骤。

1. 打开Keychain Access,在Preferences中关闭OCSP和CRL。

2. 点击Keychain Access菜单,选择Certificate Assistant > Request Certificate from Authority。

3. 输入Email地址,选择Saved to Disk和Let me specify key pair information。点击Continue继续。

4. 选择key size of 2048 bits和RSA algorithm,点击Continue继续。

5. 然后会在桌面上生成一个.CSR的文件。

6. 然后进入Provisioning Portal,选择Certificates -> Distribution -> Add Certificate,添加刚才创建的.CSR签名文件。

7. 在等待审核的时候下载并安装WWDR intermediate certificate。

8. 刷新页面,然后就可以下载证书了。下载后安装。

9. 最后一步,打开Keychain Access。选中刚才安装的private key,选择菜单中的Export Item将私钥导出。将导出的私钥备份到一个安全的地方,以便以后重装了系统可以还原。

     3).发布iOS应用程序到App Store - 创建Distribution Provisioning Profile

打开Provisioning Portal,选择Provisioning -> Distribution,选择添加一个新的profile。Distribution Method要选择App Store,App ID需要输入在前面申请的App ID。提交后需要等一会儿再刷新这个页面。然后就可以下载和安装profile了。安装后profile会被添加到XCode。

     4).发布iOS应用程序到App Store - 检查签名和生成设置

打开XCode,在Build Settings中选择Code Signing。在Release设置上选择刚才申请的Distribution Profile。

选择生成目标为iOS device,然后点击Archiving开始打包应用。 打包之后,在Organizer中就可以看到打包的程序,点击”Validate“进行验证,验证通过之后,就可以点击”Submit“提交了,这个要耐心等待上传程序了,我等等待几个小时了,还在等待中。。。


    
[2] 基于TCP跟UDP的聊天功能的实现
    来源: 互联网  发布时间: 2014-02-18
基于TCP和UDP的聊天功能的实现

    这里类似于登陆功能的实现,是基于UDP实现的,而聊天的内容,是基于TCP实现的,大概流程是:

    建立一个服务端:

   下面是UDP开启服务器返回给客户端的确定值:

   public void ServerReceive(){
if(serversocket == null){
try {
serversocket = new DatagramSocket(PORT);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

try {
byte data[] = new byte[1024];
packet= new DatagramPacket(data , data.length);
System.out.println("aaaaaaaaaaaaaaaa");
serversocket.receive(packet);
if(packet != null){
login = new String(packet.getData() , packet.getOffset() , packet.getLength());

address = packet.getAddress().toString();
System.out.println(address);
if(packetAddress.size()>0){
for(int i=0;i<packetAddress.size();i++){
if(address.equals(packetAddress.get(i)) == true){
position = i;
}
}
}
if(login.equals("Quit") == true){
packetAddress.remove(position);

}else{
if(position != -1){
}else{
packetAddress.add(address);
}
}

}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


public void ServerSend(){
if(UDPsocket == null){
try {
UDPsocket = new DatagramSocket();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(("Quit").equals(login) != true){
try {
InetAddress serverAddress = InetAddress.getByName(address.substring(1));
byte data1[] = login.getBytes();


DatagramPacket  pack = new DatagramPacket (data1 , data1.length , serverAddress , PORT);
UDPsocket.send(pack);

System.out.println("send over"+ login);

} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


客户端:

public void SendToServer(String str,int port,String Address){
try {
InetAddress serverAddress = InetAddress.getByName(Address);
//System.out.println("aaaaaaaaaa"+socket);
if(socket == null){
System.out.println("xxxxxxxxx"+socket);
socket = new  DatagramSocket();
}
byte data[] = str.getBytes();


DatagramPacket  packet = new DatagramPacket (data , data.length,serverAddress,port);
System.out.println(packet);
socket.send(packet);

socket.close();
socket = null;


} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


class ClientSendThread extends Thread{
public void run(){
SendToServer("Login",PORT,"255.255.255.255");

if(Receivesocket == null){
try {
Receivesocket = new DatagramSocket(PORT);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
while(isUDP){
try {

byte data[] = new byte[1024];
DatagramPacket pack = new DatagramPacket(data , data.length);
System.out.println("aaaaaaaaaaa");
Receivesocket.receive(pack);
ServiceAddress = pack.getAddress().toString();
String login = new String(pack.getData() , pack.getOffset() , pack.getLength());
System.out.println(login + "----------" + ServiceAddress);
Message msg = new Message();
msg.what = 0;
Bundle b = new Bundle();
b.putString("TAG", login);
msg.setData(b);
MainActivity.this.handle.sendMessage(msg);

}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}


简单的登陆功能就实现了,利用上一张说的TCP的实现,进行内容的传递,即可聊天


    
[3] EMMC与RAND的差异
    来源: 互联网  发布时间: 2014-02-18
EMMC与RAND的区别

作者:Younger Liu,

本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。

 

EMMC与RAND的区别

说到两者的区别,必须从flash的发展历程说起,因为两者都属于flash的范畴。

 

1.     Flash发展历程 1.1          NOR Flash和NAND Flash

NOR Flash和NAND Flash,两者均为非易失性闪存模块。

1988年,Intel首次发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。NOR类似于DRAM, 以存储程序代码为主,可以让微处理器直接读取。因为读取速度较快,但晶片容量较低,所以多应用在通讯产品中,如手机。

1989,东芝公司发表NAND flash结构,强调降低每比特的成本,更高的性能,并且像磁盘一样可以通过接口轻松升级。因为NAND flash的晶片容量相对于NOR flash大,更像硬盘,写入与清除资料的速度远快于NOR。目前已广泛应用在各种存储设备上, 可存储代码和资料。

 

1.2          NAND Flash发展

NAND Flash的存储单元发展:从SLC, MLC到TLC。

SLC:Single-Level Cell, 即1bit/cell,读写速度快,寿命长,价格是MLC三倍以上,约10万次读写寿命。

MLC:Multi-Level Cell, 即2bit/cell ,速度一般,寿命一般,价格一般,约3000-10000次读写寿命。

TLC = Triple-Level Cell,  即3bit/cell,速度慢,寿命短,价格便宜,约500次读写寿命,技术在逐渐成长中。

NAND Flash的存储单元从最初的SLC( Single Layer Cell), 到2003年开始兴起MLC (Multi-Layer Cell), 发展至今,SLC已经淡出主流市场,主流存储单元正在从MLC向TLC(Triple Layer Cell)迈进。纳米制程工艺和存储单元的发展,使得同样大小的芯片有更高密度和更多的存储单元,Flash得以在容量迅速增加的同时,还大幅降低了单位存储容量的成本。

但其弊端也轻易显现,从原来的1bit/cell发展到后来3bit/cell, 计算更为复杂,出错率不免更高,读写次数和寿命也会更短。在这种情况下现有MLC 和 TLC Flash 都需要搭配一颗高性能的控制芯片来提供EDC和ECC、平均擦写等Flash管理。

 

1.3           EMMC的出现

移动设备行业的迅猛发展,引发了电子产品更新换代,对存储硬件提出了更高的要求。多媒体播放、高清摄像,GPS,各色各样的应用以及外观轻薄小巧的发展趋势,要求存储硬件拥有高容量、高稳定性和高读写速度的同时,需要存储芯片在主板中占有更小的空间。然而NAND Flash 随着纳米制程和存储技术的主流趋势发展,性能却在不断下降。可擦写寿命短,出错概率高,读写速度慢,稳定性差。

嵌入式存储芯片eMMC就可以弥补这个市场需求和NAND Flash发展的缺口。

eMMC ( Embedded Multi Media Card) 采用统一的MMC标准接口, 把高密度NAND Flash以及MMC Controller封装在一颗BGA芯片中。针对Flash的特性,产品内部已经包含了Flash管理技术,包括错误探测和纠正,flash平均擦写,坏块管理,掉电保护等技术。用户无需担心产品内部flash晶圆制程和工艺的变化。同时eMMC单颗芯片为主板内部节省更多的空间。

 

2.     两者分析 2.1          Nand Flash

Nand-flash内存是flash内存的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的。

Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用。

 

2.2          EMMC

eMMC (Embedded Multi Media Card) 为MMC协会所订立的、主要是针对手机产品为主的内嵌式存储器标准规格。

eMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间。

其优点如下:

1.简化手机存储器的设计:eMMC目前是最流行的移动设备本地存储,目的在于简化手机存储器的设计。

3.加速产品研发速度,降低了移动设备上市周期和研发成本:eMMC的设计概念——简化手机内存储器的使用,将NAND Flash芯片和控制芯片设计成1颗MCP芯片,移动设备开发商只需要采购eMMC芯片,放进新手机中,不需处理其它繁复的NAND Flash兼容性和管理问题,最大优点是缩短新产品的上市周期和研发成本,加速产品的推陈出新速度

 

3.     参考资料

http://baike.baidu.com/view/3509283.htm

http://baike.baidu.com/view/3064158.htm

http://baike.baidu.com/subview/64506/5136742.htm?fromId=3233929

 

作者:Younger Liu,

本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。


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