2011年8月30日 星期二

[轉載]Android模擬器RAM修改方法


轉載自:

http://www.android123.com.cn/moniqi/806.html


Android模拟器RAM修改方法 - 尤其是3.0

作者: Android开发网原创 时间: 2011-03-06

Android模拟器启动速度慢是众所周知的,运行也很缓慢如何加速你的Android Emulator呢? 今天Android123给大家支招了,修改Android模拟器RAM大小,运行流畅度加倍,尤其是3.0 honeycomb这种吃RAM的平板没有真机使用emulator简直是煎熬,官方默认才给分配256MB运行内存,远比Xoom这样的1GB RAM的真机要少很多。

1. 我们以Windows平台的SDK为例,这里Android开发网的模拟器配置路径为 C:\Documents and Settings\android\.android\avd\android3.avd ,大家注意这个路径中蓝色的android是我的Windows用户名,而红色的android3.avd则是我蜂巢模拟器的名称,我在创建AVD时输入的是android3,具体的大家可以看下图,congfig.ini就是这个模拟器的配置文件:

android模拟器 内存

我们用记事本打开这个ini文件,当然我们可以看到Unix/Binary的换行符,这里Android123建议你使用UltraEdit或Notepad++打开,这里仅作为演示我们大家说下这个文件的结构吧,

hw.lcd.density=160 ; 是屏幕的密度
sdcard.size=64M ;这句代表分配SD卡的大小,我这里仅给了64M
skin.name=WXGA ;分辨率
skin.path=platforms\android-11\skins\WXGA ;模拟器皮肤
hw.keyboard.lid=no ;是否有物理键盘
vm.heapSize=48 ; 虚拟机默认堆大小
hw.ramSize=256 ; 模拟器的RAM运行内存大小,可以看到这里只有可怜的256MB
image.sysdir.1=platforms\android-11\images\ ; 模拟器的映像文件路径
这里大家主要是修改hw.ramSize这句,将后面的256换为更大的,当然要根据你PC电脑的物理内存来修改了,否则会严重映像你电脑的性能,如果你电脑的内存是2GB或以上,推荐和摩托Xoom平台的RAM设置的一样大小,hw.ramSize=后面写1024,保存即可,如图

android emulator ram

2011年8月19日 星期五

[轉載]Android 對話框(Dialog)大全

Activities提供了一種方便管理的創建、保存、回复的對話框機制,例如

來源:

http://android.tgbus.com/Android/tutorial/201104/348008.shtml

Activities提供了一種方便管理的創建、保存、回复的對話框機制,例如onCreateDialog(int),onPrepareDialog(int,Dialog),showDialog(int),dismissDialog(int)等方法,如果使用這些方法的話,Activity將通過getOwnerActivity()方法返回該Activity管理的對話框(dialog).   onCreateDialog(int):當你使用這個回調函數時,Android系統會有效的設置這個Activity為每個對話框的所有者,從而自動管理每個對話框的狀態並挂靠到Activity上。這樣,每個對話框繼承這個Activity的特定屬性。比如,當一個對話框打開時,菜單鍵顯示為這個Activity定義的選項菜單,音量鍵修改Activity使用的音頻流。  showDialog(int):當你想要顯示一個對話框時,調用showDialog(intid)方法並傳遞一個唯一標識這個對話框的整數。當對話框第一次被請求時,Android從你的Activity中調用onCreateDialog(intid),你應該在這裡初始化這個對話框Dialog。這個回調方法被傳以和showDialog(intid)相同的ID。當你創建這個對話框後,在Activity的最後返回這個對象。  onPrepareDialog(int,Dialog):在對話框被顯示之前,Android還調用了可選的回調函數onPrepareDialog(intid,Dialog).如果你想在每一次對話框被打開時改變它的任何屬性,你可以定義這個方法。這個方法在每次打開對話框時被調用,而onCreateDialog(int)僅在對話框第一次打開時被調用。如果你不定義onPrepareDialog(),那麼這個對話框將保持和上次打開時一樣。這個方法也被傳遞以對話框的ID,和在onCreateDialog()中創建的對話框對象。  dismissDialog(int):當你準備關閉對話框時,你可以通過對這個對話框調用dismiss()來消除它。如果需要,你還可以從這個Activity中調用dismissDialog(intid)方法,這實際上將為你對這個對話框調用dismiss()方法。如果你想使用onCreateDialog(intid)方法來管理你對話框的狀態(就如同在前面的章節討論的那樣),然後每次你的對話框消除的時候,這個對話框對象的狀態將由該Activity保留。如果你決定不再需要這個對像或者清除該狀態是重要的,那麼你應該調用removeDialog(intid)。這將刪除任何內部對象引用而且如果這個對話框正在顯示,它將被消除。  下面是幾種對話框的效果


  

  

  

  

  


  圖一:

  圖二:

  圖三:

  圖四:

  圖五:

  圖六:

  圖七:

  圖1效果:該效果是當按返回按鈕時彈出一個提示,來確保無誤操作,採用常見的對話框樣式。


  代碼:
  創建對話框方法dialog()     protected void dialog() { AlertDialog.Builder builder = new Builder(Main.this); builder.setMessage("確認退出嗎?"); builder.setTitle("提示"); builder .setPositiveButton("確認", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); Main.this.finish(); } }); builder.setNegativeButton("取消" , new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show();}
  











在onKeyDown(int keyCode, KeyEvent event)方法中調用此方法

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
dialog();
}
return false;
}

  圖2效果:改變了對話框的圖表,添加了三個按鈕

Dialog dialog = new AlertDialog.Builder(this).setIcon(
android.R.drawable.btn_star).setTitle("喜好調查").setMessage(
"你喜 ​​歡李連杰的電影嗎?").setPositiveButton("很喜歡",
new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, "我很喜歡他的電影。",
Toast.LENGTH_LONG).show ();
}
}).setNegativeButton("不喜歡", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, "我不喜歡他的電影。", Toast.LENGTH_LONG)
.show();
}
}).setNeutralButton("一般", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto- generated method stub
Toast.makeText(Main.this, "談不上喜歡不喜歡。", Toast.LENGTH_LONG)
.show();
}
}).create(); dialog.show();
  
  

  圖3效果:信息內容是一個簡單的View類型

new AlertDialog.Builder(this).setTitle("請輸入").setIcon(
android.R.drawable.ic_dialog_info).setView(
new EditText(this)).setPositiveButton("確定", null)
.setNegativeButton("取消" , null).show();

  圖4效果:信息內容是一組單選框

new AlertDialog.Builder(this).setTitle("複選框").setMultiChoiceItems(
new String[] { "Item1", "Item2" }, null, null)
.setPositiveButton("確定", null)
.setNegativeButton("取消", null).show();

  圖5效果:信息內容是一組多選框

new AlertDialog.Builder(this).setTitle("單選框").setIcon(
android.R.drawable.ic_dialog_info).setSingleChoiceItems(
new String[] { "Item1", "Item2" }, 0,
new DialogInterface.OnClickListener () {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).setNegativeButton("取消", null).show();

  圖6效果:信息內容是一組簡單列表項

new AlertDialog.Builder(this).setTitle("列錶框").setItems(
new String[] { "Item1", "Item2" }, null).setNegativeButton(
"確定", null).show();

  圖7效果:信息內容是一個自定義的佈局  1.佈局文件
  


http://schemas.android.com/apk/res/android "
android:layout_height="wrap_content" android:layout_width ="wrap_content"
android:background="#ffffffff" android:orientation="horizontal"
android:id="@+id/dialog">

android:layout_width="wrap_content"
android:id ="@+id/tvname" android:text="姓名:" />

android:layout_width="wrap_content" android:id="@+id/etname" android:minWidth=" 100dip"/>

  2.調用代碼  LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.dialog, (ViewGroup) findViewById(R.id.dialog)); new AlertDialog.Builder(this).setTitle("自定義佈局").setView(layout) .setPositiveButton("確定", null) .setNegativeButton("取消", null).show();






2011年6月29日 星期三

什麼是除權除息?

【簡單說】:因應發放股票股利或現增而向下調整股價就是除權,因應發放現金股利而向下調整股價就是除息。

除權或除息的產生係因為投資人在除權或除息日之前與當天購買者,兩者買到的是同一家公司的股票,但是內含的權益不同,顯然相當不公平。因此,必須在除權或除息日當天向下調整股價,成為除權或除息參考價。

除息參考價

為使除息前(含現金股利)與除息後所買到的價格一致,公司在發放現金股利時,將股票的價格,按照現金股利,予以同等金額的下降,此為除息參考價。

除息日申報參考價 = 前一交易日收盤價 -現金股利金額

例如:A公司決定於8月7日除息,發放現金股利3元。8月6日收盤價為50元,那麼在8月7日的開盤參考價將為(50-3)元,為47元。

除權參考價的計算

當公司發放股票股利時,流通在外的股數增多,但發放股票前後,公司整體價值不變,但股數增多了,所以在除權後,每股價值就會下降,成為除權參考價。

除權參考價=前一交易日該股票收盤價/(1+配股率)

例如:B公司決定於7月15日發放股票股利五百股(即配股率為50%0。7月14日的收盤價為150元。那麼在7月15日除權當天的參考價將為(150/1+0.5)=100元

既除權又除息的參考價計算

現在很多公司在發放股利時,會採取配股加配息的方式。其參考價的計算方法為:

除權又除息參考價=(前一交易日該股票收盤價-現金股利金額)/(1+配股率)

2011年6月15日 星期三

期末考-android client server

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class tcpserver {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
byte[] data = new byte[1024];
int temp;
try {
ServerSocket server0 = new ServerSocket(3334);
Socket socket = server0.accept();
BufferedInputStream bin = new BufferedInputStream(socket.getInputStream());

while((temp = bin.read())!= -1){
System.out.print((char)temp);
}
bin.close();

server0.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ServerSocket server1 = new ServerSocket(3335);
Socket socket = server1.accept();
BufferedInputStream bin = new BufferedInputStream(socket.getInputStream());

while((temp = bin.read())!= -1){
System.out.print((char)temp);
}
bin.close();

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

}

===============================================================
以上這邊是Server的程式部分,基本上與上課的大同小異,重點在於要在建立起一個新的Port 讓Client能夠同時連線...所以直接把中間那段,再見port的程式複製之後貼在下面,把port改3335,Server的部分就完成了...
===============================================================
至於Client的部分,也是利用上課的範例,把資料夾名稱改掉,再把專案載入進來,這樣就有兩個client的專案,一樣把第二個專案連結port的地方改掉,再把要輸出的字也改掉,就完成了..

=========================
package tw.brad.tcpclient;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;

public class tcpclient extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
byte[] buffer = "This is client1".getBytes();
try {
Socket socket = new Socket("10.0.2.2", 3334);
BufferedOutputStream bout =
new BufferedOutputStream(socket.getOutputStream());
bout.write(buffer);
bout.flush();
bout.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
==========================
以上為client1
==========================
package tw.brad.tcpclient;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;

public class tcpclient extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
byte[] buffer = "\n This is client2".getBytes();
try {
Socket socket = new Socket("10.0.2.2", 3335);
BufferedOutputStream bout =
new BufferedOutputStream(socket.getOutputStream());
bout.write(buffer);
bout.flush();
bout.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
====================
以上為Client2
====================

2011年5月22日 星期日

[轉載] 8款開放原始碼的Android遊戲引擎

以下介紹的8款開源的Android遊戲引擎,OSChina 都已收錄。

很多初學Android遊戲開發的朋友,往往會顯得有些無所適從,他們常常不知道該從何處入手,每當遇到自己無法解決的難題時,又往往會一邊羨慕於iPhone下有諸如Cocos2d-iphone之類的免費遊戲引擎可供使用,一邊自暴自棄的抱怨Android平台遊戲開發難度太高,又連個像樣的遊戲引擎也沒有,甚至誤以為使用Java語言開發遊戲是一件費力不討好且沒有出路的事情。

事實上,這種想法完全是沒有必要且不符合實際的,作為能和蘋果iOS分庭抗禮的Android(各種意義上),當然也會有相當數量的遊戲引擎存在。僅僅因為我們處於這個狹小的天地間,與外界接觸不夠,所以對它們的存在茫然不知罷了。

下面我就羅列出八款常見的Android遊戲引擎,以供有需要者參考(收費,下載量過小,不公佈源碼,以及鄙人不知道(-_-)的引擎不在此列)。


1、Angle

Angle是一款專為Android平台設計的,敏捷且適合快速開發的2D遊戲引擎,基於OpenGL ES技術開發。 該引擎全部用Java代碼編寫,並且可以根據自己的需要替換裡面的實現,缺陷在於文檔不足,而且下載的代碼中僅僅包含有少量的示例教程。

最低運行環境要求不詳。


2、Rokon

rokon是一款Android 2D遊戲引擎,基於OpenGL ES技術開發,物理引擎為Box2D,因此能夠實現一些較為複雜的物理效果,該項目最新版本為2.0.3 (09/07/10)。 總體來說,此引擎最大的優點在於其開發文檔相當之完備,並且項目作者對反饋Bug的修正非常之神速,所以該框架的使用在目前也最為廣泛,有人乾脆將它稱為Cocos2d-iPhone引擎的Android版(業務邏輯和編碼風格上也確實很像)。 附帶一提,國內某個需要註冊會員才能下載的Android遊戲框架衍生於此框架,所以大家也不要刻板的認為收費便一定是好的,免費就一定不好。

最低運行環境要求為Android 1.5。


3、LGame

LGame是一款國人開發的Java遊戲引擎,有Android及PC(J2SE)兩個開發版本,目前最高版本同為0.2.6(31/07/10)。 其底層繪圖器LGrpaphics封裝有J2SE以及J2ME提供的全部Graphics API(PC版採用Graphics2D封裝,Android版採用Canvas模擬實現),所以能夠將J2SE或J2ME開發經驗直接套用其中,兩版本間主要代碼能夠相互移植。 Android版內置有Admob接口,可以不必配置XML直接硬編碼Admob廣告信息。

該引擎除了基本的音效、圖形、物理、精靈等常用組件以外,也內置有Ioc、xml、http等常用Java組件的封裝,代價是jar體積較為龐大,PC版已突破1.2MB,Android版有所簡化也在500KB左右。 此外,該引擎還內置有按照1:1實現的J2ME精靈類及相關組件,可以將絕大多數J2ME遊戲平移到Android或PC版中。 唯一遺憾的是,該項目作者是個極其懶惰的傢伙,開發文檔從去年說到今年依舊沒有提供,只有遊戲示例可供下載。

最低運行環境要求為Android 1.1。


4、AndEngine

andengine同樣是一款基於OpenGL ES技術的Android遊戲引擎,物理引擎同樣為Box2D(標配|||)。 該框架性能普通,文檔缺乏,但示例較為豐富。

下載地址(未直接提供jar下載,源碼可通過svn提取):http://code.google.com/p/andengine/

最低運行環境要求不詳。


5、libgdx

libgdx是一款基於OpenGL ES技術開發的Android遊戲引擎,支持Android平台下的2D遊戲開發,物理引擎採用Box2D實現。 單就性能角度來說,堪稱是一款非常強大的Android遊戲引擎,但缺陷在於精靈類等相關組件在使用上不夠簡化,而且文檔也較為匱乏。

最低運行環境要求不詳。


6、jPCT

jPCT是一款基於OpenGL技術開發的3D圖形引擎(PC環境為標準OpenGL,Android為OpenGL ES), 以Java語言為基礎的,擁有功能強大的Java 3D解決方案。 該引擎與LGame(此為2D遊戲引擎)相類似,目前擁有PC(J2SE)以及Android兩個開發版本。

jPCT的最大優勢之一,就在於它驚人的向下兼容性。 在PC環境中,jPCT甚至可以運行在JVM1.1環境之中,因為jPCT內部提供的圖形渲染接口完全符合所有的Java 1.1規範(就連已經消失的Microsoft VM乃至更古老的Netscape 4 VM也不例外)。

最低運行環境要求為Android 1.5。


7、Alien3d

Alien3d是一款體積非常之小的Android 3D遊戲引擎,基於OpenGL ES技術開發。 為了壓縮體積,它根據不同功能採用多jar方式發布(包括alien3d-engine.jar,alien3d- tiled.jar,alien3d-sprites.jar,alien3d-shapes.jar,alien3d- particles2d.jar,),事實上它的核心文件大約只有40KB,所有相關jar的總和也不足150KB。

最低運行環境要求為Android 1.5。


8、Catcake

Catcake是一款跨平台的Java 3D圖形引擎,目前支持PC(J2SE)及Android環境運行(已有iPhone版規劃)。 該引擎在易用性和運行性能上皆有出色的表現,支持常見的遊戲開發功能,諸如精靈動畫,音頻處理和視頻播放等。

最低運行環境要求為Android 1.6。



轉載自:http://waineko.blogspot.com/2010/09/8android.html

2011年5月11日 星期三

網路核心程式設計-Week11-Homework

1.在blog 說明 Class InetAddress 的用法,以程式舉例

此類別表示網際網路協議 (IP) 位址。IP 位址是 IP 使用的 32 位或 128 位無符號數字,

它是一種低層級協議,UDP 和 TCP 協議都是在它的基礎上建構的。

InetAddress 的實例包含 IP 位址,還可能包含相應的主機名(取決於它是否用主機名建構或者是否已執行反向主機名解析)。

import java.net.*;
class GetIP {
public static void main(String[] args)
{

try{
InetAddress IP_Address = InetAddress.getByName("www.kimo.com.tw");
System.out.println(IP_Address);
}catch (UnknownHostException e){
System.out.println("找不到 www.kimo.com.tw 位址");
}
}
}
編譯與執行

javac GetIP.java

java GetIP

資料參考:

1.http://www.138vipbbs.com/vipccb/ccb/topic_view.cgi?forum=7&article_id=0107051121211619&publishtime_id=0107051121211619&class=1&new_window=1


2.說明FTP client/server 程式與FTP通訊協定

==============================================================
//Ftp Client
import java.io.*;
import java.net.*;
public class Client13_4 {
int i;
static String iaddr;
static int port;
static String infilename;

public Client13_4() {
try{
Socket socket=new Socket(InetAddress.getByName(iaddr),port);
DataOutputStream outstream = new DataOutputStream(socket.getOutputStream());

FileInputStream fis = new FileInputStream(infilename);
while((i=fis.read()) !=-1)
outstream.writeInt(i);
outstream.writeInt(i);
System.out.println("Data sent to internet successfully!");
socket.close();
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
public static void main(String args[]) {
if (args.length < 3){
System.out.println("USAGE: java Client13_4 [iaddr] [port] [infilename]");
System.exit(1);
}
iaddr = args[0];
port=Integer.parseInt(args[1]);
infilename = args[2];
Client13_4 ClientStart=new Client13_4();
}
}
==============================================================
//FTP server
import java.net.*;
import java.io.*;
public class Server13_4 {
int messagein;
static int port;
static String outfilename;
public Server13_4() {
try{
ServerSocket SS = new ServerSocket(port);
System.out.println("Server is created and waiting Client to connect...");
Socket socket = SS.accept();
System.out.println("Client IP = " +
socket.getInetAddress().getHostAddress());
DataInputStream instream = new DataInputStream(socket.getInputStream());
FileOutputStream fos = new FileOutputStream(outfilename);
while(messagein != -1){
messagein = instream.readInt();
fos.write(messagein);
}
System.out.println("Data written to File successfully!");
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
public static void main(String args[]){
if(args.length < 2){
System.out.println("Usage: java Server13_4 [port] [outfilename]");
System.exit(1);
}
port=Integer.parseInt(args[0]);
outfilename = args[1];
Server13_4 ServerStart=new Server13_4();
}
}
==============================================================


檔案傳輸協定英文File Transfer Protocol,簡稱為FTP)是用於在網路上進行檔案傳輸的一套標準協議。它屬於網路傳輸協定應用層

FTP是一個8位元的用戶端-伺服器協定,能操作任何型別的檔案而不需要進一步處理,就像MIME或Unicode一樣。但是,FTP有著極高的延時,這意味著,從開始請求到第一次接收需求資料之間的時間,會非常長;並且不時的必須執行一些冗長的登陸行程。


3. 何為 url, 什麼是 Domain Name System

統一資源定位符(URL,英語 Uniform / Universal Resource Locator 的縮寫)也被稱為網頁位址,是網際網路上標準的資源的位址(Address)。它最初是由蒂姆·伯納斯-李發明用來作為全球資訊網的位址的。現在它已經被全球資訊網協會編製為網際網路標準RFC1738了。

網域名稱系統英語Domain Name System,縮寫DNS)是網際網路的一項核心服務,它作為可以將域名IP位址相互對映的一個分散式資料庫,能夠使人更方便的存取網際網路,而不用去記住能夠被機器直接讀取的IP數串。

DNS 使用TCPUDP53。


資料來源:維基百科

4. window 之 localhost 如何設定

建議修改C:\windows\system32\drivers\etc\hosts 檔案,加上自訂的伺服器名稱跟127.0.0.1的對應,這樣你在網址列輸入自訂的伺服器名稱時,它就會到127.0.0.1,也就是localhost,然後apache的虛擬伺服器就會接手處理。

利用這個方法,就可以在本地模擬多個網址。

舉例來說,hosts裡面有一條localhost1 127.0.0.1,然後虛擬伺服器設定裡面的ServerName有localhost1,打在瀏覽器網址列打http://localhost1,應該就可以連到你設定的虛擬伺服器。