欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
一半是火焰一半是海水: android開(kāi)發(fā)

Android電源管理

Android電源管理

一、  相關(guān)概念

1.          出于節電的需要,一般應用在用戶(hù)一段時(shí)間無(wú)操作的情況下屏幕變暗,然后進(jìn)后休眠狀態(tài)

2.          用戶(hù)只能在設置->聲音和顯示中設置所有應用默認的屏幕亮度和進(jìn)行待機的時(shí)間

3.          電源管理的實(shí)現分內核應用兩部分,通過(guò)下面介紹的接口,我們可以設置應用程序的電源管理,以控制與其休眠相關(guān)的狀態(tài)(是否需要進(jìn)入休眠,調整cpu頻率,鍵盤(pán)燈的開(kāi)關(guān),屏幕的亮暗等)

二、  設置電源管理常用的幾種狀態(tài)
PARTIAL_WAKE_LOCK                     
屏幕關(guān),鍵盤(pán)燈關(guān),不休眠
SCREEN_MID_WAKE_LOCK            
屏幕灰,鍵盤(pán)燈關(guān),不休眠
SCREEN_BRIGHT_WEEK_LOCK      
屏幕亮,鍵盤(pán)燈關(guān),不休眠
FULL_WAKE_LOCK                            
屏幕亮,鍵盤(pán)燈亮,不休眠

三、  使用電源管理注意事項

1.          可在onCreate時(shí)設置該界面的電源管理,在onDestroy時(shí)取消設置

2.          可在onResume時(shí)設置該界面的電源管理,在onPause時(shí)取消設置

3.          注意設置是以Activity為單位,不是以應用為單位

4.          注意在AndroidManifest.xml中聲明該應用有設置電源管理的權限

5.          注意加鎖解鎖要成對出現

6.          注意多個(gè)用途最好用多個(gè)鎖,不要一鎖多用,以免出錯

7.          注意對運行在后臺和異常時(shí)對鎖的處理

8.          注意在網(wǎng)絡(luò )連接或傳輸時(shí)最好加鎖,以免傳輸被中斷

9.          注意加鎖以保證程序邏輯

四、  代碼舉例

1.          源碼修改

1)         引入電源管理包,以使用相關(guān)類(lèi)
import android.os.PowerManager;

2)         類(lèi)中加入變量
PowerManager.WakeLock mWakeLock;

3)         修改onCreate
public
void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         PowerManager pm =
                             (PowerManager) getSystemService(Context.POWER_SERVICE);
         mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,
                            "XYTEST");
         mWakeLock.acquire();
}

4)         修改onDestroy
public
void onDestroy()
{
         super.onDestroy();
         mWakeLock.release();
}

2.          AndroidManifest.xml文件修改
<uses-permission android:name="android.permission.WAKE_LOCK"/>

11月16日

Android縮放drawable

 

一、  相關(guān)概念

1.        Drawable就是一個(gè)可畫(huà)的對象,其可能是一張位圖(BitmapDrawable),也可能是一個(gè)圖形(ShapeDrawable),還有可能是一個(gè)圖層(LayerDrawable),我們根據畫(huà)圖的需求,創(chuàng )建相應的可畫(huà)對象

2.        Canvas畫(huà)布,繪制的目的區域,用于繪圖

3.        Bitmap位圖,用于圖的處理

4.        Matrix矩陣,此例中用于操作圖片

二、  步驟

1.        drawable畫(huà)到位圖對象上

2.        對位圖對象做縮放(或旋轉等)操作

3.        把位圖再轉換成drawable

三、 示例
         static Bitmap drawableToBitmap(Drawable drawable) // drawable 轉換成bitmap
         {
                   int width = drawable.getIntrinsicWidth();  
//
drawable的長(cháng)寬
                   int height = drawable.getIntrinsicHeight();
                 Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888:Bitmap.Config.RGB_565;        
// drawable的顏色格式
                   Bitmap bitmap = Bitmap.createBitmap(width, height, config);    
// 建立對應bitmap
                   Canvas canvas = new Canvas(bitmap);        
//
建立對應bitmap的畫(huà)布
                   drawable.setBounds(0, 0, width, height);
                   drawable.draw(canvas);     
// drawable內容畫(huà)到畫(huà)布中
                   return bitmap;
         }

         static Drawable zoomDrawable(Drawable drawable, int w, int h)
         {
                   int width = drawable.getIntrinsicWidth();
                   int height= drawable.getIntrinsicHeight();
                   Bitmap oldbmp = drawableToBitmap(drawable);
// drawable轉換成bitmap
                   Matrix matrix = new Matrix();  
//
創(chuàng )建操作圖片用的Matrix對象
                   float scaleWidth = ((float)w / width);  
// 計算縮放比例
                   float scaleHeight = ((float)h / height);
                   matrix.postScale(scaleWidth, scaleHeight);        
// 設置縮放比例
                   Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true);      
// 建立新的bitmap,其內容是對原bitmap的縮放后的圖
                   return new BitmapDrawable(newbmp);      
// bitmap轉換成drawable并返回
         }
}

11月11日

Android改變窗口標題欄的布局

 

一、  重點(diǎn)
一般應用的Title都是建立應用時(shí)在AndroidManifest.xml中配置的,或是用setTitle設置的簡(jiǎn)單字符串,要是想加入按鈕,圖片等多個(gè)復雜的布局,使用以下方法:
在窗口建立時(shí),可以把一個(gè)xml布局設置成該應用的Title

二、  實(shí)例

a)       功能:把title設置成為一個(gè)字串和一個(gè)按鈕的組合

b)       修改xxActivity.java代碼
public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
//
注意順序
         setContentView(R.layout.main);                                                                         
// 注意順序
         getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
      // 注意順序
                            R.layout.title);
}

c)          填加title.xml代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android=
http://schemas.android.com/apk/res/android
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
      <TextView android:id="@+id/text" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentLeft="true" 
        android:text="text" /> 
      <Button android:id="@+id/button" 
        android:layout_width="wrap_content" 
        android:layout_height="30px" 
        android:text="button" />
</LinearLayout>

三、  注意

a)          注意設置順序
requestWindowFeature
要在setContentView之前
getWindow().setFeatureInit
最好在setContentView之后

b)         注意requestWindowFeature(Window.FEATURE_CUSTOM_TITLE)不要和其它對TITLE的設置requestWindowFeature(xxxx)一起使用

 

 

 

11月9日

Android程序中使用定時(shí)器Timer

 

一、  重點(diǎn)

1.          如何使用handlermessage

2.          如何延時(shí)調用

     1) 使用延遲發(fā)消息的方式

     2) 也可以使用android.util.Timer與handler相結合的方式
   見(jiàn) http://hi.baidu.com/iammuyue/blog/item/20ef6b10bbc92377cb80c467.html

二、  舉例

1.          功能:實(shí)現一個(gè)應用界面,在用戶(hù)長(cháng)按觸模屏兩秒后,打出Log信息

2.          步驟:

1)         建立project

a)          eclipse中點(diǎn)擊菜單File->New->Project……

b)         選擇Android ProjectNext

c)          填寫(xiě)project的各項內容如下
Project name: test_xy //
目錄名, 它位于你設定的workspace之下
Package name: com.android.test //
打包名稱(chēng)
Activity name: .TestXy //
類(lèi)名(生成文件TestXy.java)
Application name: test_xy //
可執行程序名

然后點(diǎn)Finish按鈕

2)         修改TestXy.java代碼如下
package com.android.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class TextXy extends Activity {
         /** Called when the activity is first created. */
         static final int MESSAGE_LONG_PRESS = 1;        
// 定義長(cháng)按事件ID
         static final int LONG_PRESS_TIMEOUT = 2000;           
//
定義長(cháng)按為2
         final Handler mHandler = new LongPressHandler();        
// 定義handler

         class LongPressHandler extends Handler {     
// handler
類(lèi)的實(shí)現
                   public void handleMessage(Message msg) {              
// 事件處理函數
                            switch (msg.what) {
                            case MESSAGE_LONG_PRESS:    
// 選擇事件ID
                                     Log.d("TEST_XY", "now long press!");
                                     break;
                            }
                   }
         }

         @Override
         public void onCreate(Bundle savedInstanceState) {
                   super.onCreate(savedInstanceState);
                   setContentView(R.layout.main);
         }

         public boolean onTouchEvent(MotionEvent ev) {                 
//
處理觸屏事件
                   int action = ev.getAction();       
// 得到觸屏動(dòng)作
                   if (action == MotionEvent.ACTION_DOWN) { 
// 手指按下
                            mHandler.sendMessageDelayed(mHandler
                                               .obtainMessage(MESSAGE_LONG_PRESS),
                                               ONG_PRESS_TIMEOUT);     
// 延時(shí)2秒后發(fā)送事件
                   } else if (action == MotionEvent.ACTION_UP) {       
// 手指抬起
                            mHandler.removeMessages(MESSAGE_LONG_PRESS);
                           
// 取消延時(shí)事件
                   }
                   return false;
         }
}

3)         運行

a)          eclipse中點(diǎn)擊菜單Run->Run Configurations……

b)         雙擊左邊的Android Application,產(chǎn)生了一個(gè)New Configuration,點(diǎn)開(kāi)它填寫(xiě)內容如下:
Name: yan_config //
隨便起一個(gè)
Project: test_xy //
剛才起的project, 即目錄名

c)          點(diǎn)擊Apply,然后點(diǎn)Run,多等一會(huì )兒就出來(lái)了

d)         此時(shí)點(diǎn)擊右上的DDMS,可看到Log信息,在長(cháng)按屏幕兩秒后,可看到剛才加入的Log信息

 

動(dòng)態(tài)改變Android控件大小

一、  方法

使用getLayoutParams() setLayoutParams()方法

二、  示例代碼
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) aaa.getLayoutParams();    //
取控件aaa當前的布局參數
linearParams.height = 365;       
// 當控件的高強制設成365象素
aaa.setLayoutParams(linearParams);
// 使設置好的布局參數應用到控件aaa

三、  原理

a)          getLayoutParams() setLayoutParams()都是控件基類(lèi)viewpublic方法,在外部也可以直接調用

b)         由于LayoutParams一般是在加入容器中設置的,所以容易混淆我們所指定的布局屬性究竟是保存在容器中,還是控件本身的屬性,答案是控件本身。但是在設置時(shí)還是要注意布局屬性與容器種類(lèi)密切相關(guān)

如何新建和使用Android控件

一、  重點(diǎn)

如何在layoutxml)中使用自定義的控件

二、  舉例

1.          功能:實(shí)現一個(gè)新的瀏覽器控件,使點(diǎn)擊瀏覽器中任何位置都能打印Log信息

2.          步驟:

1)         建立project

a)          eclipse中點(diǎn)擊菜單File->New->Project……

b)         選擇Android ProjectNext

c)          填寫(xiě)project的各項內容如下
Project name: test_xy //
目錄名, 它位于你設定的workspace之下
Package name: com.android.test //
打包名稱(chēng)
Activity name: .TestXy //
類(lèi)名(生成文件TestXy.java)
Application name: test_xy //
可執行程序名

然后點(diǎn)Finish按鈕

2)         繼承一個(gè)已有控件,加入新的屬性和方法

a)          eclipse左側:test_xy->src->com.android.test 點(diǎn)右鍵 New->class

b)         建立新控件:Name: MyWebView,其它使用默認選項
MyWebView.java
內容如下:
package com.android.test;

import android.view.MotionEvent;
import android.webkit.WebView;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;

public class MyWebView extends WebView {
         public MyWebView(Context context) {
                   this(context, null);
         }
         public MyWebView(Context context, AttributeSet attrs){
                   this(context, attrs, 0);
         }
         public MyWebView(Context context, AttributeSet attrs,int defStyle) {
                   super(context, attrs, defStyle);
         }       
//
注意實(shí)現帶三個(gè)參數的構造函數
         public boolean onTouchEvent(MotionEvent ev) {
          // 加入新功能
                   int action = ev.getAction();
                   Log.d("XY_TEST", "now recv key: " + action);
                   return super.onTouchEvent(ev);
         }
}

3)         修改xml文件

a)          eclipse左側:test_xy->res->layout->main.xml修改其中內容如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=
http://schemas.android.com/apk/res/android
         android:orientation="vertical" android:layout_width="fill_parent"
         android:layout_height="fill_parent">
         <TextView android:layout_width=
"fill_parent"
                   android:layout_height="wrap_content"
                   android:text="@string/hello" />
         <com.android.test.MyWebView
                   android:id="@+id/myview" android:layout_height=
"fill_parent"
                   android:layout_width="fill_parent" />
</LinearLayout>
注意使用全名, com.android.test.MyWebView, 否則找不到新控件

4)         運行

a)          eclipse中點(diǎn)擊菜單Run->Run Configurations……

b)         雙擊左邊的Android Application,產(chǎn)生了一個(gè)New Configuration,點(diǎn)開(kāi)它填寫(xiě)內容如下:
Name: yan_config //
隨便起一個(gè)
Project: test_xy //
剛才起的project, 即目錄名

c)          點(diǎn)擊Apply,然后點(diǎn)Run,多等一會(huì )兒就出來(lái)了

d)         此時(shí)點(diǎn)擊右上的DDMS,可看到Log信息,在觸摸WebView控件時(shí),可看到剛才加入的Log信息

 

 

修改android公共控件和后臺服務(wù)

1.   位置
公共控件的代碼在源碼目錄android/frameworks/base/core/java/android/
后臺服務(wù)的代碼在源碼目錄android/frameworks/base/services/java/android/server

2.   修改
修改其中代碼并執行mm編譯
形如:
$ cd frameworks/base/services/java/com/android/server/
$ vi IntentResolver.java
$ mm

3.   替換
編譯后用生成的包替換手機上/system/framework/中相應的包
編譯后生成的文件見(jiàn)提示
形如:
$ cd out/target/product/general/system/framework/
$ adb push services.jar /system/framework/

4.   使新的包生效

a)          方法1:
重啟手機后生效

b)         方法2:
殺死system_server進(jìn)程,使系統重新啟動(dòng),這種方法速度快

$ ps
找到system_server對應的pid, 假設它為1219
$ kill 1219

5.   注意

a)          絕大多數情況下都能成功,不過(guò)最好在替換前備份原有jar

b)         如果替換重要的包使機器不能啟動(dòng)到桌面了,可以通過(guò)重新打包system.img,然后重新燒寫(xiě)(fastboot)到系統中解決此問(wèn)題,注意system.img的大小
$ ./out/host/linux-x86/bin/mkyaffs2image -f out/target/product/generic/system out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
$ out/host/linux-x86/bin/acp -fpt out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img out/target product/generic/system.img
$ fastboot flash system system.img

此時(shí)用fastboot燒寫(xiě)方式重啟手機

 

建立Android SDK開(kāi)發(fā)環(huán)境

建立SDK開(kāi)發(fā)環(huán)境

 

一、  系統平臺
Linux
系統:ubuntu 8.04,最好用ubuntu系統,否則可能遇到缺少庫,編譯器版本不對等一系列問(wèn)題,安裝和使用詳見(jiàn)文檔《ubuntu系統的使用》

二、  安裝JDK

1.          為什么使用JDK
用以支持AndroidEclipseAndroid中的應用都是java程序,所以想在Linux上建立開(kāi)發(fā)Android環(huán)境,就需要安裝java虛擬機

2.          安裝方法

     使用ubuntu安裝包
$ sudo apt-get install sun-java6-bin

4.          測試是否安裝成功
$ java -version

三、  安裝Android SDK

1.          為什么使用Android SDK
Android SDK
包含創(chuàng )建和運行 Android 應用程序所需的一切,包括設備仿真器和高級調試工具,如果你只想看看Android運行起來(lái)什么樣,那只安裝它就可以

2.          安裝

1)         注意選擇你所使用平臺和硬件對應的版本
平臺windows, linux, mac
版本1.0, 1.5, 1.6…

2)         下載
打開(kāi)網(wǎng)頁(yè)http://code.google.com/android/download_list.html
下載android-sdk-linux_x86-1.0_r1.zip

3)         安裝
$ unzip  ../recv/android-sdk-linux_x86-1.0_r1.zip
無(wú)需編譯,解開(kāi)就能運行

3.          運行
$ cd android-sdk-linux_x86-1.0_r1/tools
$ ./emulator -datadir ../../                
// datadir是一個(gè)必須存在的目錄,用來(lái)存放數據
耐心等待,特別特別的慢,看到主菜單大概要三四分鐘,請注意,安裝到這一步,android就能在你的Linux系統中運行了

4.          設置路徑
$ export PATH=$PATH:/exports/android/test/android-sdk-linux_x86-1.0_r1/tools
最好把環(huán)境變量的設置加入$USER/.bashrc腳本中

5.          創(chuàng )建并使用模擬的500M SD
$ ./mksdcard -l SD500M 500M ../../sd500m.img      
建立虛擬SD卡的映像文檔
$ ./emulator -sdcard ../../sd500m.img -datadir ../../

6.          縮放屏幕0.5
$ ./emulator -scale 0.5 -datadir ../../

7.          SDK目錄結構

1)         Add-ons
擴展的第三方庫所在目錄(如現在所放的地圖庫)

2)         Docs,documention.html
本地和網(wǎng)上提供的SDK文檔

3)         Platforms
1.11.5兩種
SDK
Samples
其中含示例代碼

android.jar
java打包文件,其中包含構建應用程序的所有Android SDK類(lèi)

4)         Tools
構建應用程序的命令行工具(adb, emulator…

5)         Usb_driver
Android
G1)設備連接計算機后所需的驅動(dòng)程序,只有Window平臺需要,Linux平臺可以自動(dòng)識別

四、  安裝eclipse

1.          為什么使用eclipse
eclipse
是一個(gè)基于java的開(kāi)發(fā)平臺,它是一個(gè)框架,通過(guò)安裝插件構建開(kāi)發(fā)環(huán)境,java就是它的插件,android也是一組插件,我們利用它用發(fā)和調試運行在android上的程序

2.          安裝

1)         下載
打開(kāi)網(wǎng)頁(yè)http://www.eclipse.org/downloads/ 
下載Eclipse IDE for Java EE Developers

2)         解壓
tar xvzf ../download/eclipse-jee-ganymede-SR1-linux-gtk.tar.gz

3)         運行
cd eclipse
./eclipse
使用默認的workspace就可以了

3.          安裝androideclipse插件

1)         eclipse中點(diǎn)擊菜單Help->Software Updates……

2)         切換到Available Software標簽,點(diǎn)Add Site……按鈕

3)         在彈出的對話(huà)框里輸入https://dl-ssl.google.com/android/eclipse/,然后按OK

4)         選項新出新的Developer tools然后點(diǎn)Install……

a)          Android Developer Tools

b)         Android DDMSDalvik Debug Monitor Service
查看線(xiàn)程,堆棧,內存占用,廣播,虛擬GPS坐標等

5)         點(diǎn)Next,然后Finish

6)         重新啟動(dòng)Eclipse后生效

4.          指定Android SDK對應的目錄

1)         eclipse中點(diǎn)擊菜單Window->Preferences

2)         左側選Android,右側選Browse……,指定你android SDK的安裝目錄

3)         點(diǎn)擊Apply,然后點(diǎn)OK

五、  配置AVDAndroid Virtual Device

1.          用于配置一些模擬器的特性:模擬器影像大小/觸摸屏/軌跡球/攝像頭/屏幕分辨率/鍵盤(pán)/GSM /GPS/Audio錄放/SD卡支持/緩存區大小等

2.          如果用SDK1.5可能出現提示讓你建立AVD
Name:AVD1.5
Target: Android 1.5 - 1.5
SDCard: 64M
點(diǎn)
Create AVD
然后再點(diǎn)finish即可

六、  第一個(gè)android程序

1.          建立project

1)         eclipse中點(diǎn)擊菜單File->New->Project……

2)         選擇Android ProjectNext

3)         填寫(xiě)project的各項內容如下
Project name: test_xy  
目錄名, 它位于你設定的workspace之下
Package name: com.android.test 
打包名稱(chēng)
Activity name: TestXy         
好像是類(lèi)名(生成文件TestXy.java)
Application name: test_app_name   
可執行程序名

然后點(diǎn)Finish按鈕

2.          填寫(xiě)代碼
這時(shí)可以看到代碼界面了,從左邊的樹(shù)中打開(kāi)代碼
test_xy 
à src à com.android.testxyà TestXy.javaà TestXy à onCreate
修改其中代碼(不改也行) 

3.          運行

1)         eclipse中點(diǎn)擊菜單Run->Run Configurations……

2)         雙擊左邊的Android Application,產(chǎn)生了一個(gè)New Configuration,點(diǎn)開(kāi)它填寫(xiě)內容如下:
Name: yan_config //
隨便起一個(gè)
Project: test_xy  //
剛才起的project, 即目錄名

3)         點(diǎn)擊Apply,然后點(diǎn)Run,多等一會(huì )兒就出來(lái)了

 

 

 

建立Android源碼開(kāi)發(fā)環(huán)境

Android源碼的編譯

一、  配置環(huán)境

1.          磁盤(pán)
需要6G以上剩余空間

2.          Linux系統

Ubuntu 6.06以上版本,我用的是buntu 8.04,具體請見(jiàn)下篇文檔《ubuntu系統的使用》

3.          Git工具(Git 1.5.4以上版本)
它是類(lèi)似CVS的版本管理工具,如果你的代碼不用從網(wǎng)上下載,而是從別人處復制,則無(wú)需此工具

$ sudo apt-get install git-core gnupg

4.          Java環(huán)境(JDK 5.0 update12以上版本)
$ sudo apt-get install sun-java6-jdk
具體安裝請見(jiàn)上篇文檔《Android環(huán)境的搭建》

5.          Python (Python 2.4以上版本)
http://www.python.org/download/下載2.4以上版本
$ tar xvzf python-2.4.5.tgz
$ cd python-2.4.5/
$ ./configure
$ make; make install

6.          依賴(lài)的deb
$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
其中flex bison build-essential zip curl可以從光盤(pán)安裝
其余gperf libsdl-dev libesd0-dev libwxgtk2.6-dev需要從網(wǎng)上安裝,它們還依賴(lài)一些安裝包,所以要用apt-get下載,不要直接下deb包安裝

7.          調試工具
$ sudo apt-get install valgrind

二、  下載及編譯運行android源碼

1.          下載安裝腳本
$ wget http://android.git.kernel.org/repo
$ chmod 777 repo
$ cp repo /bin/

2.          用安裝腳本下載源碼
$ mkdir android_code
$ cd android_code
$ repo init -u git://android.git.kernel.org/platform/manifest.git
$ repo sync

以上命令是下載最新版本,也可以下載其它版本
如我買(mǎi)的手機,在設置->關(guān)于手機->固件版本中看到是1.5,所以下載1.5版本,方法如下
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-1.5r3
$ repo sync
 // 此后會(huì )長(cháng)時(shí)間下載

3.          編譯

1)         正常編譯
$ cd android_code
$ make
映像編譯成功后會(huì )在目錄 android_code/src/out/target/product/generic 下產(chǎn)生一些image文件:ramdisk.img system.img userdata.img

2)         可能出現的問(wèn)題及解決方法

1.          make若提示找不到-lncurses,則需要做以下鏈接
ln –s /lib/libncurses.so.5 /lib/libncurses.so

2.          make若提示找不到run-java-tool,則需要設置java的安裝路徑
$ export ANDROID_JAVA_HOME=$JAVA_HOME

3.          若提提示找不到zlib.h, 則運行如下命令安裝zlib開(kāi)發(fā)包
$ sudo apt-get install zlib1g-dev

4.        下了一個(gè)最新版本后顯示說(shuō)只能使用java-1.5版本,于是從1.6版本降回1.5
$ sudo apt-get install sun-java5-jdk flex
$ sudo update-java-alternatives -s java-1.5.0-sun

5.          如果報錯 "compression requires the missing zlib module" 可能是python找不到zlib
這時(shí)需要先安裝zlib, 然后重編python, 并取代當前版本python
$ sudo apt-get install zlib1g-dev
$ python2.6 --version

可看到當前版本, 下載當前版本, 重新編譯安裝
$ tar xvzf python-2.6.2.tgz
$ cd python-2.6.2/
$ ./configure --prefix=/usr/local
$ make; make install

3)        編譯sdk
$ make sdk
此時(shí)SDK產(chǎn)生于此目錄下:android_code/out/host/linux-x86/sdk/
此包如同下載的sdk包,可供eclipse使用,注意把它移動(dòng)其它位置使用,否則一編譯其它應用,它就被刪除掉了

4)         編譯不同Android硬件平臺對應版本
需要在make前先針對設備進(jìn)行設置,形如:
$ choosecombo 1 1 8 3
使用不同參數,編譯結果存存儲的目錄不同
默認包生成目錄:android_code/out/target/product/qsd8250_surf/system/app/*.apk
以上選項包生成目錄:android_code/out/target/product/generic/system/app/*.apk

4.          運行

1)        運行普通的虛擬器emulator
emulator
的路徑是:

/home/xieyan/bin/android_code/out/
host/linux-x86/bin/emulator
設置環(huán)境變量
export PATH=$PATH:android_src/out/host/linux-x86/bin
$ . build/envsetup.sh
$
partner_setup
$ emulator

2)         指定img運行
$ export   ANDROID_PRODUCT_OUT=/home/xieyan/bin/android_code/out/target/product/generic
$ emulator -image system.img -data userdata.img -ramdisk ramdisk.img

三、  常用的源碼文件

1.          frameworks/base/core/java/android/widget/下邊
Android
系統控件的實(shí)現

2.          package/apps
普通應用程序的實(shí)現

3.          out/target/product/generic/system/apps/*.apk
安裝包生成的位置

四、  參考

1.          官方網(wǎng)站的安裝說(shuō)明
http://source.android.com/download

 

11月6日

android源碼中常用于參考的代碼

在應用開(kāi)發(fā)時(shí),常遇到有些功能不知是否能實(shí)現,不知如何實(shí)現的問(wèn)題,在網(wǎng)上資料又不多的情況下,可以用參考已有源碼的方式來(lái)解決這些問(wèn)題,經(jīng)常參考的目錄如下

 

1、   系統控件的實(shí)現:了解有什么控件,控件的功能,功能如何實(shí)現
frameworks/base/core/java/android/*

2、   應用程序的實(shí)現:Android系統中所有的應用程序都在這里實(shí)現,了解它們如何實(shí)現
package/apps/*

3、   系統提供的例程:各種類(lèi)型程序的實(shí)現范例
development/samples/*

 

11月3日

Android常用工具

一、  Log

1.        logcat不同級別的打印信息,級別如下
V    Verbose
D    Debug
I    Info
W    Warn
E    Error
F    Fatal
S    Silent

2.        如何在log里打行號和時(shí)間
getFileName ()
getClassName ()
getMethodName ()
getLineNumber ()

二、  Adb

1.        把程序裝手機里:一般程序裝apk即可

1)        手機打開(kāi),邊上usb線(xiàn),直接連上電腦

2)        系統ubuntu 8.04
sdk
android-sdk-linux_x86-1.5_r3/tools/adb shell
root權限(因為連接真機,若邊模擬器就無(wú)所謂哪個(gè)用戶(hù)了)

3)        使用命令adb devices看設備是否連上了
如果同時(shí)啟了模擬器和連接了手機,adb會(huì )讓你選擇與誰(shuí)連接

4)         注意:如果你有多個(gè)SDK,千萬(wàn)要使用匹配的adb命令,最好用絕對路徑,否則很容易得到提示說(shuō)找不設備,如果說(shuō)找不到adb,請嘗試以下方法
$ killall adb

$ rmmod ehci_hcd
$ ./adb kill-server
$ ./adb start-server

2.        adb常用參數

1)        adb devices
察看手機是否連接(手機需要打開(kāi) USB debug)

2)        adb pull <A> <B>
A
為手機路徑,B為電腦路徑,意思為:把文件從手機復制到電腦上

3)        adb push <B> <A>
A
為手機路徑,B為電腦路徑,意思為:把文件從電腦復制到手機上

4)        adb remount
得到手機的系統文件讀寫(xiě)權

5)        adb install 包名
安裝pc中的apk軟件到手機

6)        adb shell
進(jìn)入手機的超級終端Terminal

3.          adb shell

1)         看當前log信息
# logcat

2)         adb shell用普通shell命令
# busybox df
# busybox ls

3)         android上的網(wǎng)絡(luò )調試
adb shell
支持以下命令

a)          # ping
發(fā)出 ping 命令,查看 Google.com 是否可用

b)        # ifconfig
lo 是本地或 loopback 連接。 
tiwlan0  WiFi 連接

4)        數據庫使用與調試

a)          操作數據庫
# cd /data/data/com.android.mails/databases/
# sqlite3
庫名
sqlite > select * from
表名
Ctr+D
退出
程序中參見(jiàn)關(guān)鍵字: execSQL, rawQuery

b)         查看數據字典
sqlite > .sch

 

Android基本組件及其交互

一、  Android的基本組件

1.          Activity
應用程序中每個(gè)屏幕顯示都通過(guò)繼承和擴展基類(lèi)
Activity
在一個(gè)應用程序中每個(gè)Activity都是獨立的

2.          Service
Service
是沒(méi)有可見(jiàn)的用戶(hù)界面,但可以長(cháng)時(shí)間在后臺運行

3.          Broadcast
用戶(hù)接受廣播通知的組件,廣播是一種同時(shí)通知多個(gè)對象的事件通知機制

應用程序注冊不同的Broadcast Receiver,從而接收不同廣播通知
不實(shí)現圖形界面

4.          Content Provider
應用程序彼此間需要共享資源,數據通訊時(shí),采用content provider機制

它能將應用程序特寫(xiě)的數據提供給另一個(gè)應用程序使用

二、  組件間的通訊

1.          ContentProvider用于提供,ContentResolver用于調用

2.          Intent
用于在不同組件間傳遞消息:
Activity, Service, Broadcast
Intent
一般帶有一個(gè)組件對另一組件的請求的動(dòng)作名稱(chēng),請求動(dòng)作及相關(guān)數據

1)         Activity相互調用
Intent in = new Intent(ac01.this, pickup.class);
startActivity(in);

2)         ActivityBroadcast相互調用
public class
AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent)
    {
        ac01 app = ac01.getApp();
        app.btEvent("from AlarmReceiver");
    }
}
Intent intent = new Intent(ac01.this, AlarmReceiver.class);
PendingIntent p_intent = PendingIntent.getBroadcast(ac01.this, 0, intent, 0);
// We want the alarm to go off 30 seconds from now.
long firstTime = SystemClock.elapsedRealtime();
firstTime += 800;
// Schedule the alarm!
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 800, p_intent);

3)         ActivityService相互調用
public class
NotifyService extends Service{
    @Override
    protected void onCreate() {
        ac01 app = ac01.getApp();
        app.btEvent("from NotifyService");
    }
    @Override public IBinder onBind(Intent intent) { return null; }
}
context.startService(new Intent(context, NotifyService.class));

 

Android界面開(kāi)發(fā)

一、  界面元素

1.          窗口:Activity
應用程序中每個(gè)屏幕顯示都通過(guò)繼承和擴展基類(lèi)Activity實(shí)現

分類(lèi):基本Activity,帶內容的Activity(如ListActivity

2.          對話(huà)框:Dialog
一種顯示于Activity之上的界面元素,由Activity管理,用于顯示一些臨時(shí)信息和功能,它比Activity開(kāi)銷(xiāo)小

1)         常用對話(huà)框:
AlertDialog
:信息對話(huà)框
DatePickerDialog
,TimePickerDialog:時(shí)間日期選擇對話(huà)框
ProgressDialog
:進(jìn)度對話(huà)框
還可以設置對話(huà)框內容為我們自定義的View

2)         相關(guān)函數:
onCreateDialog()
:創(chuàng )建對話(huà)框的實(shí)現
showDialog()
:需要顯示的時(shí)候調用
onPrepareDialog()
:更改已有對話(huà)框時(shí)調用

3.          菜單:Menu
一種顯示于Activity之上的界面元素,由Activity管理,用于提供用戶(hù)一些額外的選項和設置

1)         常用菜單:
Options Menu
:按Menu鍵時(shí)從屏幕底部滑出的菜單
Context Menu
:用戶(hù)通過(guò)在按件上長(cháng)按調出它
Submenu
:用于給菜單分類(lèi),可被添加到其它菜單上,不能添加到子菜單上

2)         相關(guān)函數:
onCreateOptionMenu()
:創(chuàng )建菜單 onCreateContextMenu…
onOptionsItemSelected()
:處理菜單項的單擊事件
onPrepareOptionsMenu()
:動(dòng)態(tài)更新

4.        可視化控件:View
View
是可視化控件的基類(lèi)

1)        常用控件:
TextView, ImageView
Button, CheckBox, RadioButton, ImageButton, ToggleButton
AnalogClock, DigitalClock
EditText, List…

2)        數據綁定:adapter
adapter
將控件(如List, GridView)和復雜數據(如數據,鍵表)綁定起來(lái)

5.        其它界面元素
標題欄

二、  布局的實(shí)現
設置控件在屏幕上如何排布

1.        LinearLayout:線(xiàn)性的布局方式
最常用,上下或左右的添加控件

2.        GridView:網(wǎng)格布局
控件按照順序依次填到每個(gè)格子里就好了,使界面很整齊

3.        TableLayout:表格布局
以行列形式管理子控件,每行為一個(gè)TableRow,TableRow可添加子控件

4.        AbsoluteLayout:絕對坐標布局
可以讓子元素指定準確的x/y坐標值,并顯示在屏幕上。(0, 0)為左上角。
AbsoluteLayout
沒(méi)有頁(yè)邊框,允許元素之間互相重疊(盡管不推薦)。
不推薦使用,因為其在不同的設備上可能不能很好地工作。

5.        RelativeLayout:相對坐標布局
控件可指定他們相對于其它元素或父元素的位置(通過(guò)ID指定)。
可以以右對齊,或上下,或置于屏幕中央的形式來(lái)排列兩個(gè)元素。

6.        FrameLayout:?jiǎn)螏季?/font>
所有的子元素將會(huì )固定在屏幕的左上角,后一個(gè)子元素將會(huì )直接在前一個(gè)子元素之上進(jìn)行覆蓋填充

三、  事件響應

1.          用注冊回調函數的方式響應事件

2.          如果沒(méi)被任何一個(gè)View處理,則由Activity處理

3.          常用事件處理

1)         onKeyDown()

2)         onKeyUp()

3)         onTrackballEvent()

4)         onTouchEvent()

四、  應用軟件代碼結構

1.        res:資源
資源是在代碼中使用到的并且在編譯時(shí)被打包進(jìn)您的應用程序的附加文件
在代碼中通過(guò)R類(lèi)調用(R類(lèi)自動(dòng)生成,形如R.string.title)

1)        layout:存放布局用的xml文件

a)        布局就像容器,里面可以裝下很多控件,每個(gè)控件又有布局,字體設定,
如字體大小在layoutxml里使用:
Android:textAppearance=”?android:attr/textAppearanceSmall”

b)        默認的布局文件main.xml

2)         drawable:存放圖片圖標

3)         values:存放常量的xml文件(如字串)

2.          src:代碼

3.          AndroidManifest.xml
包含應用程序的基本信息,有哪些組件,哪些資源

1)         應用程序的java包名

2)         應用程序中所含組件(Activity, Service, BroadcastReceiver, ContentProvider

3)         應用程序調用其它程序時(shí)的權限

4)         應用程序被其它程序調用時(shí)對其它程序的權限要求

5)         使用Android API的最低版本

6)         應用程序依賴(lài)的庫

五、  國際化的支持(多語(yǔ)言)

1.        在系統中如何設置本地語(yǔ)言
桌面->settings->Local & text->Select locale->Chinese(China)

2.        在程序中如何加入多語(yǔ)言支持
res/value
中是默認的字體
把它復制一份成為res/value-zh-rCN文件夾,然后把其中文字改為簡(jiǎn)體中文

3.        在不改變系統設置的前提前,測試當前應用對某一語(yǔ)言的支持
import java.util.Local; //
引入相關(guān)類(lèi)
import android.util.DisplayMetrics;

OnCreate函數中加入以下本地化設置
Resources res = getResources();
Configuration conf = res.getConfiguration();
conf.locale = Locale.SIMPLIFIED_CHINESE;  //
設置為簡(jiǎn)體中文
DisplayMetrics dm = res.getDisplayMetrics();
res.updateConfiguration(conf,dm);
編譯后再運行程序時(shí),讀取的字串就是res/value-zh-rCN目錄中strings.xml里的文字了

六、  常見(jiàn)問(wèn)題及解決方法

1.        android.app.Application
創(chuàng )建一個(gè)屬于你自己的android.app.Application的子類(lèi),然后在manifest中申明一下這個(gè)類(lèi),這是android就為此建立一個(gè)全局可用的實(shí)例,你可以在其他任何地方使用Context.getApplicationContext()方法獲取這個(gè)實(shí)例,進(jìn)而獲取其中的狀態(tài)

2.        用別人寫(xiě)的java文件改出自己的,R.xx報錯
由于資源找不對,要把它的res文件和AndroidManifest.xml內容也做相應替換,注意xml里邊要改成自己的類(lèi)名

3.        android中可以使用java中的類(lèi)嗎
一般數據結構使用它,而界面使用android自帶的界面元素

4.        layout中的控件與程序中控件的關(guān)系
平等的,layout中的控件用R.id.xxx得到

5.        布局沖突
requestWindowFeature
setContentView沖突

七、  android是重要的包
android.app
:提供高層的程序模型、提供基本的運行環(huán)境
android.content
:包含各種的對設備上的數據進(jìn)行訪(fǎng)問(wèn)和發(fā)布的類(lèi)
android.database
:通過(guò)內容提供者瀏覽和操作數據庫
android.graphics
:底層的圖形庫,包含畫(huà)布,顏色過(guò)濾,點(diǎn),矩形,可以將他們直接繪制到屏幕上.
android.location
:定位和相關(guān)服務(wù)的類(lèi)

android.media
:提供一些類(lèi)管理多種音頻、視頻的媒體接口
android.net
:提供幫助網(wǎng)絡(luò )訪(fǎng)問(wèn)的類(lèi),超過(guò)通常的java.net.* 接口
android.os
:提供了系統服務(wù)、消息傳輸、IPC 機制
android.opengl
:提供OpenGL 的工具
android.provider
:提供類(lèi)訪(fǎng)問(wèn)Android 的內容提供者
android.telephony
:提供與撥打電話(huà)相關(guān)的API 交互
android.view
:提供基礎的用戶(hù)界面接口框架
android.util
:涉及工具性的方法,例如時(shí)間日期的操作
android.webkit
:默認瀏覽器操作接口
android.widget
:包含各種UI 元素(大部分是可見(jiàn)的)在應用程序的屏幕中使用

 

Android模擬器調試與真機調試

一、  模擬器調試與真機調試

1.          模擬器調試
運行源碼或SDK中的emulator,加參數

2.          真機調試

1)         usb線(xiàn)連接G1硬件和PC

2)         若是windows系統,則安裝驅動(dòng)

3)         用源碼或SDK中的adb命令看硬件是否連接成功
$ adb devices
正常調試

4)         注意:

a)          Linux連接真機時(shí)需使用root權限

b)         如果之前連接過(guò)模擬器,最好連接前先殺掉adb后臺進(jìn)程
$ killall adb

3.          Eclipse中調試
若連接真機,未打開(kāi)模擬器時(shí),直接連接真機調試
若未連接真機,已打開(kāi)模擬器時(shí),在當前模擬器中調試
若未連接真機,也未打開(kāi)模擬器時(shí),打開(kāi)模擬器調試
若只開(kāi)多個(gè)真機或多個(gè)模擬器時(shí),同時(shí)有多個(gè)可連接的設備,彈出列表供用戶(hù)選擇

4.          命令行中使用adb工具調試
連接多個(gè)設備時(shí),需要用命令行參數指示設備名或設備類(lèi)型
$ adb –s
設備名shell  設備名由adb devices列出
$ adb –d shell   
與硬件設備相連
$ adb –e shell
與模擬器相連


Android系統文件結構

一、  鏡像文件image

1.          如何得到鏡像文件

1)         編譯android源碼之后,在out/target/product/generic產(chǎn)生
ramdisk.img
、system.img、userdata.img

2)         SDKplatforms\android-*\images
ramdisk.img、system.img、userdata.img

2.          各鏡像文件的含義

1)         system.img是由 system目錄打包壓縮得到的,以只讀方式掛載。

2)         userdata.img是由 data目錄打包壓縮得到的,以讀寫(xiě)方式掛載,用于存放用戶(hù)數據,用戶(hù)安裝的軟件包在被裝在這里。

3)         ramdisk.img是模擬器的文件系統,把ramdisk.img解壓出來(lái)可知道,ramdisk.img里的文件和根文件夾的文件基本一樣。

3.          鏡像文件的掛載順序
模擬器裝載ramdisk.img并解壓到內存,接著(zhù)分別把system.imguserdata.img掛載到 ramdisk下的systemdata目錄。

4.          如何更改系統的鏡像文件

1)         模擬器
運行模擬器時(shí)指明鏡像文件名參數,可以使用新生成的鏡像文件

2)        真機
通過(guò)燒寫(xiě)替換原有鏡像文件

二、  系統目錄說(shuō)明

1.        應用程序安裝目錄

1)        系統應用程序所在目錄
/system/app/*.apk

2)        用戶(hù)安裝應用程序所在目錄
/data/app/*.apk

3)        注意:

a)        在模擬器中,每重啟一次,/system/app/下的應用都會(huì )被還原,有時(shí)/data/app下也會(huì )被清除

b)        若在/system/app/data/app下有重名的應用,不一定會(huì )啟動(dòng)哪一個(gè),尤其是在adb install殺死正在運行的程序時(shí),有時(shí)舊的就會(huì )被啟動(dòng)

2.        用戶(hù)數據所在目錄
/data/data/
應用包名/shared_prefs 配置文件
/data/data/
應用包名/databases/*  庫文件所在目錄

3.        SD卡對應目錄
/sdcard/

 

安裝和卸載Android應用程序(apk包)

一、  安裝

 

1.          安裝第三方應用
$ adb install apk
文件名

2.          安裝系統應用
$ adb remount
$ adb push apk
文件名 /system/app    // apk文件名形如testme.apk

二、  卸載

1.          $ adb uninstall 包名 // 包名形如com.android.testme

2.          Home->設置->應用程序->管理應用程序->選擇某應用程序->卸載

三、  相關(guān)文件

1.          /system/app/apk文件
系統應用

2.          /data/app/包名.apk
第三方應用

3.          /data/data/包名
此位置用于存儲用戶(hù)數據

4.          /data/dalvik-cache/組合名.dex
dex
文件是Android 虛擬機Dalvik 支持的字節碼文件格式

5.          /data/data/com.android.launcher/databases/launcher.db
Launcher
Android應用程序的啟動(dòng)器,launcher.db是應用程序數據庫。

若應用程序數據發(fā)生混亂,刪掉數據庫文件,并殺掉com.android.launcher進(jìn)程,再使Launcher重新啟動(dòng)并重新生成應用程序數據庫,以恢復錯誤
$ adb shell
$ cd /data/data/com.android.launcher/databases/
$ rm launcher.db

$ ps //
找到com.android.launcher對應的進(jìn)程號
$ killall
進(jìn)程號
重新進(jìn)入應用列表界面(Home),此時(shí)launcher自動(dòng)被重啟,數據庫重新生成

四、  apk的格式
apk
文件將AndroidManifest.xml 文件、應用程序代碼(.dex 文件)、資源文件和其他文件打成一個(gè)壓縮包
$ mv testme.apk xx.zip
$ mkdir tmp; cd tmp
$ unzip ../xx.zip
此時(shí)可看到apk包中的內容

10月12日

從c++到j(luò )ava (二)

學(xué)習JAVA編程(二)

 

一、  JAVA特性和習慣用法

1.          指針
JAVA
中沒(méi)有指針,用以下方法使用
Test a = new Test(); a.t();

2.          地址傳遞和值傳遞
原始類(lèi)型是值傳遞
對象 (非原始)類(lèi)型是地址傳遞

3.          手動(dòng)回收資源
一般情況下,只要new,系統會(huì )自動(dòng)釋放,但更嚴謹地做法是手動(dòng)回收,如下:
Employee e1 = new Employee( "Susan", "Baker" );
……
e1 = null;
System.gc();      // garbage collection

此時(shí)析構函數protected void finalize()會(huì )被調用

4.          內嵌類(lèi)(一個(gè)類(lèi)中聲明另一個(gè)類(lèi))

1)         內嵌類(lèi)可以放在類(lèi)中的任意一個(gè)位置,程序都可以找到它

2)         內嵌類(lèi)的好處
內嵌類(lèi)可以使用所屬類(lèi)的私有變量和方法
內嵌類(lèi)的作用域只在所屬類(lèi)內部,其它類(lèi)是不可見(jiàn)的,從而減少混亂
節約資源

5.          匿名內嵌類(lèi)(anonymouse inner class)

1)        沒(méi)有具體名字的內嵌類(lèi),因為只使用一次,所有一般不命名

2)        寫(xiě)法
fancyButton.addActionListener
(
    new ActionListener()  // ActionListener
是一個(gè)interface, 含一個(gè)方法
    {// anonymous inner class
        public void actionPerformed( ActionEvent event )
        {
            JOptionPane.showMessageDialog( null,
                "You pressed: " + event.getActionCommand() );
        }
    }
);
它返回的是一個(gè)實(shí)例,只處理從這個(gè)handler來(lái)的信息

3)        運行時(shí)生成內嵌類(lèi)的class文件,形如
xxx$1.class

6.          事件處理

1)         引入java.awt:事件處理包

2)         需要設置listenerhandler

3)         任何一個(gè)對象都可以被監聽(tīng)(addListener, 當它listen的事件發(fā)生時(shí)就調add時(shí)指定的handler處理

7.          多線(xiàn)程

1)        繼承Thead類(lèi)

2)        關(guān)鍵的方法
start()
,sleep(),destroy(),resume(),stop(),getName()

3)        線(xiàn)程執行優(yōu)先級1-10

4)        在外部使用它
PrintThread thread1 = new PrintThread( "thread1" );
thread1.start(); //
此時(shí)進(jìn)入ready狀態(tài),等待資源

8.        界面

1)        引入java.swing;JFC (用于在java中開(kāi)發(fā)界面)

2)        由于基類(lèi)原因,控件即可以draw也可以做為contrainer

二、  JAVA對應語(yǔ)法

1.        類(lèi)的引入

1)        在某一類(lèi)(文件)中想使用其它類(lèi)時(shí)(如同C語(yǔ)言中的包含頭文件)

2)        使用import關(guān)鍵字,形如
import java.io.*

2.        工具函數的寫(xiě)法
C++
中有些工具函數,可能被多處調用,本身又不屬于某個(gè)類(lèi),在JAVA中可以專(zhuān)寫(xiě)一個(gè)Utility.java,里邊的函數都是static的,直接用里邊的函數,不用實(shí)例化

3.          枚舉

近似類(lèi)的寫(xiě)法,形如:
public enum FolderType {
    HOLDS_FILDERS, HOLDS_MESSAGES
}
FolderType.HOLDS_FILDERS

4.          宏定義
類(lèi)中
public static final int IOERROR = 1;

5.          ifdef
沒(méi)有ifdef類(lèi)似的功能可以使用,只能用常量或變量的判斷來(lái)選擇執行代碼的不同部分

 

 

 

從c++到j(luò )ava (一)

學(xué)習JAVA編程(一)

 

一、  目的
由于之前都用C/C++寫(xiě)程序,現在改用JAVA寫(xiě)android程序,有些相關(guān)的認識和積累,記錄下來(lái),自已保存資料,也供大家參考,幫助您在和我遇到同樣問(wèn)題的時(shí)候,可以快速解決。
我遇到的問(wèn)題基本分以下幾類(lèi):

1.          不了解程序的流程:編譯,執行,如何代碼組織

2.          看不懂別人寫(xiě)的程序:重要的關(guān)鍵字不認識

3.          JAVA的特性和習慣用法:不明白什么意思

4.          某些功能不知如何實(shí)現:找不到JAVA對應的語(yǔ)法

二、  流程

1.          組織代碼

1)         以類(lèi)組織
整個(gè)JAVA語(yǔ)言建立在類(lèi)的邏輯結構上,任何想法都必須封裝在類(lèi)中,也就是說(shuō)不允許函數,變量定義在類(lèi)以外。

2)         程序入口
既然所有函數都必須封裝在類(lèi)中,主函數(main)也不例外,哪個(gè)類(lèi)是入口,就把main放在該類(lèi)里邊。對其它類(lèi)和方法的調用可以寫(xiě)在main中,形如:
public class HelloWorld {
    public static void main(String args[]) {
        System.out.println("Hello World!");
    }
}

3)         文件類(lèi)型

a)          *.java
源程序代碼文件

一般一個(gè)類(lèi)寫(xiě)在一個(gè).java文件中,也可以把兩個(gè)類(lèi)寫(xiě)在一個(gè)java文件中,編譯出來(lái)成兩個(gè).class
public
的類(lèi)因于供他人調,所以要單寫(xiě)一個(gè)java文件,文件的名字和類(lèi)名一致

b)         *.class
編譯后生成的字節碼文件

c)        *.jar
JAVA
程序的打包文件(類(lèi)似ZIP包,可用WINRAR等工具打開(kāi))

2.          編譯
編譯單個(gè)文件
$ javac xxx.java
編譯多個(gè)文件
$ javac *.java
注意xxx要和類(lèi)名統一,此時(shí)當前目錄下生成xxx.class文件

3.          執行

1)         運行xxx.class
$ java xxx
注意不加擴展名

2)         運行xxx.jar
$java -classpath xxx.jar packagename.classname
解壓縮xxx.jar, 其中的目錄是package, 其中的文件是class
xxx.jar
通常是由工具生成的,含有一些字節碼文件和信息文件

三、  關(guān)鍵字

1.          thissuper

1)         this指當前對象,super指它的父類(lèi)

2)         super用法

a)          放在構造的頭一句,調用它父類(lèi)的構造函數(注意只能放在頭一句)

b)         super.func(xxx)是調父類(lèi)的一個(gè)函數,通常用于本類(lèi)中重寫(xiě)(override)了父類(lèi)的函數,用此方法調用其父類(lèi)中的該函數

2.          try, cache, finally

1)         try:把可能出錯的代碼放在try {}里,有些代碼加了try就可以編譯通過(guò)了

2)         cache:把錯誤處理放在catch (xxx) {}中,可有多個(gè)catch同時(shí)存在,過(guò)不同參數指定不同錯誤的處理

3)         finally:無(wú)論發(fā)沒(méi)發(fā)生意外,finally{}都被執行,它用來(lái)釋放try申請的資源(如操作數據庫時(shí))

3.          abstract class(抽象類(lèi))與instance class(具體類(lèi))

1)         instance class可以實(shí)例化,abstract class不能實(shí)例化

2)         abstract class里邊抽象的方法用public abstract func();它定義了方法,但沒(méi)有實(shí)現,就是C++里的純虛函數

4.        abstract classinterface

1)        它們都用于實(shí)現多樣性(Polymorphism),即繼承它的類(lèi)實(shí)現各有不同

2)        interface可以虛擬多重繼承而abstract class不能

3)        abstract class可以有自己的數據成員,也可以有非abstract的成員方法,而interface方式實(shí)現中,只能有靜態(tài)的不能被修改的數據成員(static final),所有的成員方法都是abstract

4)        本質(zhì)不同:abstract的父子類(lèi)間本質(zhì)相同,而interface只是定義了某個(gè)方法約定或者說(shuō)是性質(zhì)

5.          extendsimplements

1)        extends:繼承父類(lèi),只要那個(gè)類(lèi)不是聲明為final或者那個(gè)類(lèi)定義為abstract的就能繼承

2)        implementsJAVA中不支持多重繼承,但是可以用interface來(lái)實(shí)現,這樣就要用到implements,繼承只能繼承一個(gè)類(lèi),但implements可以實(shí)現多個(gè)接口,用逗號分開(kāi)就行了,形如:
class A extends B implements C,D,E

3)        extends用在類(lèi)名和接口名前
implements
用在接口名前

6.        throwthrows

1)        它們java處理異常方式

2)        throw用在try后面

3)        throws用在一個(gè)方法后面

7.          final

1)         用于修飾非抽象類(lèi),非抽象方法和變量

2)         final類(lèi):不能被繼承,final類(lèi)的方法默認是final

3)         final方法:不能被子類(lèi)方法覆蓋,可以被繼承,編譯時(shí)被轉入內嵌機制,提高執行效率

4)         final變量:只能被賦值一次,之后不能再改變
通常用static final聲明常量,注意常量一般用大寫(xiě)

8.          static

1)         用于修飾成員變量和成員方法

2)         static變量和方法獨立于該類(lèi)的任何對象,被類(lèi)的所有實(shí)例共享,所以不需要聲明任何對象就可以訪(fǎng)問(wèn),形如:
類(lèi)名.靜態(tài)方法名(參數列表)
類(lèi)名.靜態(tài)變量名

3)         注意靜態(tài)方法不能用thissuper關(guān)鍵字

4)         static方法必須被實(shí)現,不能是抽象的

9.          layout
layout
:設置容器中的排布方式
FlowLayout   
按添加的順序從左到右從上到下排布
BorderLayout 
按東西南北中設定位置
GridLayout   
網(wǎng)格布局
BoxLayout
使需要空間的組件得到最大尺寸

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久