R.id.stringidR.string.valuestrR.layout.sssdR.java 是资源文件的映射类R类为每份资源定义一个内部类android:id="@+id/ok" 在R类中id内部类中新增一个ok的属性 R.id.ok变量(Button)findViewById(R.id.ok)可以获取对应的控件android:label = "@string/test"android清单文件  AndroidManifest.xml 整个应用的全局描述文件 每个项目中必须存在的文件定义权限 uses-permission android应用由一个或多个基本组件所组成(activity-用户交互组件和view-显示UI组件 用户实实在在看到的组件 需要放入activity)view要显示则应该调用activity中的setContentView(R.layout.<资源文件名称>)方法 参数是需要显示的View对象也可以通过findViewById(R.id.<UI对应的ID>)大部分的视图组件放入到 android.widget 和 android.view中Button btn = new Button(this); 通过new可以创建所有的View组件 参数都是thisbtn.setOnClickListener(new OnClickListener(){        @Override        public void onClick(View v){                }})--线形布局<LinearLayout android:id="@+id/ok" android:orientation:"vertical" android:layout_width="fill_parent"               android:height="fill_parent"> wrap_content 和fill_parentandroid:gravity设置所有组件对其方式RelativeLayout相对布局android:background="@drawable/bk"GridLayout--控件分类TextView EditText 属性几乎可以共用 android:textSize="10pt"android:inputType="number"设置输入的类型是数字的Button RadioGroup RadioButton CheckBoxRadioGroup点击条目时响应的方法 setOnCheckedChangeListenerListView ListActivity --继承列表activity继承ListActivity类ListView GridView Spinner 都是容器而 adapter是加载项  和内容和显示的样式有关Adapter常见实现类有 ArrayAdapter SimpleAdapter SimpleCursorAdapter BaseAdapterandroid:orientation="vertical"list.setOnItemClickListener(new OnItemClickListener(){     @Override       public void onItemClick(){              }});android:layout_height="240dp" 可以设置具体的大小android:layout_width="240dp""@string/status"ListActivity是Activity当中需要继承的  ListView是XML中的List关联标签事件 分为 注册事件和回调事件 setXxxListener就是注册事件 事件源(Button) 事件 事件监听器KeyEvent.KEYCODE_A 表示键盘中的A键setLongClickListener长时间点击事件因为事件的监听一般只写一次 因此一般使用匿名内部类通常建议使用匿名内部类作为监听器btn.setOnClickListener(new OnClickListener(){         @Override         public void onClick(View v){         }});同样也可以直接绑定到标签中<Button android:onClick="doOnClick" /> 在Activity类中定义doOnClick方法 public void doOnClick(View source)Activity主要作用是完成界面初始化的工作Handler消息传递机制只允许UI线程处理UI组件继承Handler类  覆盖的方法有handleMessage与Handler相关的类有 Message Looper MessageQueue ;Handler handler = new Handler(){        @Override        public void handleMessage(Message msg){               Bundle bundle = msg.getData();               bundle.getString("paramString");               bundle.getInt("paramInt");               bundle.putString("paramName","paramValue");        }};Bundle bundle = new Bundle();bundle.putString("paramName","paramValue");bundle.putInt();SELECT * FROM TEXMPAPER ;Toast.makeText(this,content,short).show();progressBar.setProgress(i);ListActivity ListViewTabActivity TabHostActivity必须在AndroidManifest.xml中注册多个Activity组成Activity栈当前活动的Activity位于栈顶继承Activity类 并重写onCreate方法 在被创建时调用在Activity中启动另一个Activity方法 startActivity(Intent)Intent intent = new Intent(OneActivity.this,TwoActivity.class);startActivity(Intent) --从OneActivity跳转到TwoActivity调用finish方法结束某个Activity使用Bundle用于不同Activity之间数据传递Intent提供的方法putExtras(Bundle);Bundle getExtras();--在Activity中获取意图Intent intent = getIntent();Bundle bundle = intent.getExtras();Activity四种加载模式 standard(每次都会创建新的Activity实例) singletop(如果栈顶有该Activity实例则不创建新Activity实例) singletask(同一个Task只有一个Activity实例) singleinstance(永远只会创建一个Activity实例)AndroidManifest.xml中的<intent-filter/>定义了第一次调用的Activity --所有activity必须要在清单文件中声明 否则不起作用<activity android:name=".OneActivity">资源文件分两类 可以用R资源清单类访问的 一般在res目录下 和 不能用R清单类进行访问的资源 一般在assets目录下可以通过Resource类进行获取对应的资源文件的实际值Resource res = getResources();--获取字符串资源String str = res.getText(R.string.strId);--获取图片资源Drawable draw = res.getDrawable(R.drawable.logoId);--获取数组类型资源int[] intArr = res.getIntArray(R.array.arrayId);在XML中使用资源信息@resource_type/resource_name 如 @id/stringId  <resources><color name='red'>#dddd</color>  @color/red  <string name='key'>value</color> @string/key</resources><array name="array_a">  <item>@string/key</item> --可以引用其他资源信息  <item>item2</item></array>getResources().getStringArray(R.array.array_a); --获得字符串数组<ListView android:entries="@array/array_a">BitMap相当于一张位图绘图关键类 Canvas PaintSharedPreferences主要保存简单的Key-Value键值对SharedPreferences是一个借口 只能通过Context调用的getSharedPreferences(name,mode)来获得SharedPreferences实例读SharedPreferences数据用sharedPreferences.getString("xxx",null) 或者 getInt()写数据 则用 Editor editor = sharedPreferences.edit();editor.putString("xxx","valueString");editor.putInt("xxx","valueInt");--弹出一个小的提示框Toast.makeText(this,"显示内容",Toast.LENGTH_LONG).show();Android中的应用程序的包名来作为该应用程序的标示--获得其他应用程序的SharedPreferencesContext context = createPackageContext("应用程序对应的包名",Context.CONTEXT_IGNORE_SECURITY);context.getSharedPreferences("count",CONTEXT.MODE_WORLD_READABLE);--File存储FileInputStream openFileInput(String name) ;FileOutputStream openFileOutput(String name) ;SD卡的地址File file = Environment.getExternalStorageDirectory() ;如果要在SD卡读写数据必须要在清单文件(AndroidManifest.xml)文件定义权限--SD卡中创建和删除文件的权限<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">--SD卡中写入数据的权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">注册Provider<provider android:name=".DDDProvider" android:authorities="uri.dd" android:exported="true"> uri.dd是Uri域名android:exported用于指定是否可以被其他应用程序调用uri --> content://uri.dd/word/2     访问uri.dd下的 word的数据为2的数据ContentResolver会通过uri找到对应的ContentProvider来进行CRUD操作A调用ContentResolver对应的insert方法时对调用uri对应的ContentProvider来进行insert操作编写自己的XxxContentProvider需要继承ContentProvider类 重写 insert query update delete等方法  然后配置ContentProvider Uri uri = Uri.parse("content://uri.dd/");ContentResolver resolver = getContentResolver();resolver.query(uri,param..);ContentResolver所有的方法的第一个参数是uriContentObserver用于监听ContentProvider的数据变化定义Service的子类 然后在清单文件中定义该Service Service只运行于后台<service android:name=".XxxService">         <intent-filter>             <action android:name="xxxx.xxx.service">         </intent-filter></service>启动Servicefinal Intent intent = new Intent();intent.setAction("xxxx.xxx.service");startService(intent);停止ServicestopService(intent);AIDL Service 跨进程之间的通信AIDL定义的源代码必须要以.aidl结尾cat.aidlpackage dddinterface ICat{          String getColor();          double getWidth();}ADT工具会自动生成ICat.java文件 ICat实现了IBinder和ICat两个接口TelephonyManager电话管理器TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);SmsManager短信管理器SmsManager smsManager = SmsManager.getDefault();smsManager.sendTextMessage(对面号码,null,内容,PendingIntent.getActivity(this,0,new Intent(),0),null);PendingIntent是可以发送到其他应用组件的Intent授予发送短信的权限 <uses-permission android:name="android.permission.SEND_SMS" />AudioManager音频管理器--播放外部音乐MediaPlayer mediaPlayer = new MediaPlayer();Uri uri = Uri.parse("http://xxxx/xx/xx.mp3");mediaPlayer.setDataSource(this,uri);-- 准备播放音乐mediaPlayer.prepare();-- 播放音乐mediaPlayer.start();VideoView播放视频 是一个标签 相当于 ImageViewSELECT * FROM THRSDEPTREQUEST FOR UPDATE ;ServerSocket建立服务器WebView浏览网页Android内置了HttpClient可以很好的进行http请求和http响应ServerSocket--服务端try {ServerSocket ss = new ServerSocket(3000);      --监听3000端口是否有连接进来 如果有则写入你好!!while(true){Socket socket = ss.accept() ;OutputStream out = socket.getOutputStream();out.write("你好!!".getBytes());out.close() ;socket.close();}} catch (IOException e) {e.printStackTrace();}--客户端try {Socket s = new Socket("127.0.0.1", 3000);BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));System.out.println(br.readLine());} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}添加访问互联网的权限<uses-permission android:name="android.permission.INTERNET">--加载网页信息<WebView android:id="@+id/test" android:width="fill_parent" android:height="wrap_content">WebView test = (WebView) findViewById(R.id.test);test.loadUrl(url);ImageView 来加载静态图片 也使用AnimationDrawable来开发逐逐帧动画ImageView image ;BitmapDrawable drawable = (BitmapDrawable)image.getDrawable();--为ImageView设置图片资源image.setImageBitmap(BitmapFactory.decodeStream(inputStream));Bitmap bitmap = drawable.getBitmap();--BitmapDrawable就是封装了Bitmap的drawableBitmapDrawable drawable = new BitMapDrawable(bitmap);Bitmap.createBitMap(BitMap source, int x,int y ,int width,int height);--BitmapFactory是Bitmap一个工具类 可以从不同的数据源解析创建Bitmap对象Bitmap bitmap = BitmapFactory.decodeResource(Resources res,int drawableId) ;从xml中解析图片资源Bitmap bitmap = BitmapFactory.decodeFile(String pathName); 从文件路径获取Bitmapassets目录管理器AssetManager assetManager = getAssets();String imageArr[] = assetManager.list();InputStream inputStream = assetManager.open(imageArr[0]);--为ImageView设置图片ImageView.setImageBitmap(BitmapFactory.decodeStream(inputStream));可以获得一张位图的某一块图片绘图基础 Canvas Paint Path  Canvas是依附于View的画布绘图应该继承View类 并重写onDraw(Canvas canvas)Canvas对应的各种方法drawXxx() 可以绘制各种图形 比如直线 点 圆  还提供了 旋转(rotate) 移动(translate) 缩放(scale) 倾斜(skew)Paint代表的是在Canvas上的一个画笔 可以表示 填充颜色 风格 Paint.setColor()Paint.setStyle()一个自定义View组件 需要重写View类的onDraw(Canvas canvas) 方法 把需要绘制的内容放在 onDraw方法中TextView extends View{         public TextView(Context context){                // do something          }         @Override         public void onDraw(Canvas canvas){                Paint paint = new Paint();                canvas.drawTextOnPath();                --画一张图片                canvas.drawBitmap(bitMap,0,0,paint);                canvas.drawPath(path,paint);         }}--显示TextViewsetContentView(new TextView(this));动画其实就是不断重复调用View组件上的onDraw(Canvas canvas)方法如果每次在View组件上绘制的图形不同 就成了动画的效果每次View组件上的图形状态数据发生变化 都应该通知View组件重写调用onDraw(Canvas canvas)重写绘制图片通知View重绘 可调用invalidate(在UI线程中)或postInvalidate(非UI线程中)--创建菜单 boolean onCreateOptionsMenu(Menu menu){  MenuInflator inflator = new MenuInflator(this);  //把定义好的菜单赋给menu  inflator.inflate(R.menu.myMenu,menu);  return onCreateOptionsMenu(menu);}--菜单选中 点中菜单时的响应boolean onOptionsItemSelected(MenuItem item)WindowManager windowManager = getWindowManager();Display dis = windowManager.getDefaultDisplay();DisplayMetrics metrics = new DisplayMetrics();dis.getMetrics(metrics);--获取屏幕宽度int windowWidth = metrics.widthPixels;--获取屏幕高度int windowHeight = metrics.heightPixels;final GameView gameView = new GameView(this);setContentView(gameView);Handler handler = new Handler(){@Override  public void handleMessage(Message message){  if(message.what == 0x123){    --通知重写绘图    gameView.invalidate();    }  }};final Timer timer = new Timer();timer.schedule(new TimerTask(){@Override  public void run(){  ballX += xSpeed ;    ballY += ySpeed ;    handler.sendEmptyMessage(0x123);  }},0,300);--图形组件类public class GameView extends View{       Paint paint = Paint();       public GameView(Context context){       super(context);        --使当前视图获得焦点        setFocusable(true);       }       @Override       public void onDraw(Canvas canvas){       paint.setStyle(Paint.Style.FILL);        --设置去锯齿        paint.setAntiAlias(true);        if(isLose){        paint.setColor(Color.RED);          paint.setTextSize(20);          --生成一个已结束的Text          canvas.drawText("游戏已结束",50,200,paint);        }else{          --绘制小球          paint.setColor(Color.rgb(240,240,80));          canvas.drawCircle(ballX,ballY,12,paint);          --绘制球拍          paint.setColor(Color.rgb(80,80,200));          canvas.drawRect(racketX,racketY,racketX+RACKET_WIDTH,racketY+RACKET_HEIGHT,paint);        }       }}--对图形特效的处理--对图形进行平移(setTranslate) 旋转(setRotate) 缩放 (setScale)Matrix matrix = new Matrix();--获得图片资源BitMap bitmap = ((BitMapDrawable)getResources().getDrawable(R.drawable.xxx)).getBitMap();--matrix设置--旋转matrix.setSkew(12,0);--缩放  缩放比例matrix.setScale(1.0f);然后利用BitMap bitMap2 = BitMap.createBitmap(bitmap,0,0,width,height,matrix,true) 图片就会和matrix设置的内容进行变换--画布重新绘制新位图资源canvas.drawBitmap(bitMap2,matrix,null);在onDraw方法中进行图片转换设置按键事件的定义SELECT * FROM thrsdeptrequest FOR UPDATE ;gameView.setOnKeyListener(new OnKeyListener(){@Override  public void onKey(View source,int keyCode,KeyEvent event){         --按键时 对某些键进行绑定业务逻辑  如按A和D键分别做相应的事件         switch(event.getKeyCode()){              case KeyEvent.KEYCODE_A:                --DO SOMETHING               break ;               case KeyEvent.KEYCODE_D:                --DO SOMETHING               break ;         }  }});ImageView --定时任务对象final Timer timer = new Timer();-- 每100毫秒执行一次timer.schedule(new TimerTask(){@Override  public void run(){         handler.sendEmptyMessage(0x123);  }},0,100) ;--handler的作用是重新绘制游戏界面的生成final Handler handler = new Handler(){      @Override      public void handleMessage(Message message){             if(message.what == 0x123){                 --游戏界面重新绘制                gameView.invalide();             }      }};--获取位图Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane);--获取图片宽度bitmap.getWidth();--获取图片高度bitmap.getHeight();Canvas 还提供了对扭曲图的支持invalidate();方法通知View组件进行重新绘制drawBitmapMesh方法--触摸屏幕事件public void onTouchEvent(MotionEvent event){       --获取点击处的 X Y坐标       event.getX();       event.getY();       return true ;}逐帧(Frame)在xml中定义逐帧动画用  xxx.xml<animation-list android:oneshot="true|false"> oneshot 设置是否循环播放<item android:drawable="@drawable/test" android:duration="1"/> 定义每一帧的图片和持续的时间</animation-list><item >java代码中使用 AnimationDrawable 提供的两个方法 start和stop方法ImageView imageView = (ImageView)findViewById(xxx);xxx表示xml的文件名称AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();指定点爆炸 其实就是逐帧动画加载音效  声音文件放置在raw文件夹下面MediaPlayer boom = MediaPlayer.create(this,R.raw.boom); boom.start() --播放音乐R.anim.blast 表示一个逐帧动画 逐帧动画一般放置在anim文件夹下面imageView.setBackgroundResource(R.anim.blast);imageView.setVisibility(View.INVISIBLE) ;imageView.setVisibility(View.VISIBLE) ;imageView.setLocation();AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();animationDrawable.start(); --启动动画FrameLayout frame = new FrameLayout(this);frame.setBackgroundResource(R.drawable.xxx);frame.addView(myView);点击屏幕事件 frame.setOnTouchListener(new OnTouchListener(){                            @Override                              public void onTouch(View source,TouchEvent event){                                     if(event.getAction == TouchEvent.ACTION_DOWN){                                       anim.stop();                                       myView.setLocation(event.getX()-40,event.getY()-20);                                        anim.start();                                        --播放声音                                        mediaPlayer.start();                                     }                              }});--少量数据的存储使用SharedPrefences 是以key-value的形式存储数据 接口本身没有写入数据的能力SharedPrefences.edit() -- > Editor对象来实现数据的修改getXxx Xxx可以是int  double boolean float StringSharedPrefences是一个借口 所以只能通过getSharedPrefences("xxx",MODE_WORLD_READABLE);SharedPrefences sp = getSharedPrefences("xxx",MODE_WORLD_READABLE);sp.getString("xx","默认值"); 如果xx对应的值不存在 则获得 第二个参数 即设置的默认值SharedPrefences.Editor editor = sp.edit();editor.putString("xx","12345");--提交所有值editor.commit();SharedPrefences总是以XML的格式保存数据保存在路径 /data/data/<package name>/shared_prefes/ 目录下面获取其他应用程序的SharedPrefences其实就是需要获得该应用程序的ContextContext context = createPackageContext("包名",Context.IGNORE_SECURITY);SharedPrefences sp = context.getSharedPrefences("xxx",MODE_WORLD_READABLE);sp.getInt("xxx",0);--io 流openFileInputStream(String name)openFileOutputStream(String name)--获得SD卡路径File sdCardFile = Environment.getExternalStorageDirectory();String sdPath = sdCardFile.getCanonicalPath();--SD卡写入数据权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">--SQLite数据库 其实就是一个文件   /mnt/data/目录下SQLite数据库其实是通过SQLiteDatabase来操作的一般通过继承SQLiteOpenHelper来获得子类 然后通过getReadableDatabase() getWritableDatabase() 来获得 SQLiteDatabase实例--SimpleAdapter 用法List<Map<String,String>> list = new ArrayList<String,String>();list.put("name1","");list.put("name2","");SimpleAdapter simpleAdapter = new SimpleAdapter(this,list,R.layout.listxx,new String[]{"name1","name2"},new int[]{R.id.name1xxx,R.id.name2xxx});第三个参数是list整体样式第四个参数是与list对应的key值第五个参数是每个内容显示的样式信息ListView listView = (ListView)findViewById(R.id.xx);listView.setAdapter(simpleAdapter);SQLiteDatabase database ;Service继承Service类 然后在 AndroidManifest.xml中定义Intent intent = new Intent();intent.setAction("xxx.xx.First_Service");--参数是AndroidManifest.xml中设置service下的action名称startService(intent);<service android:name=".FirstService">  <intent-filter>  <action android:name="xxx.xx.First_Service">  </intent-filter></service>stopService(intent);service总是在后台运行而不显示在前天绑定本地service与之通信IntentService和Service的区别 就是 IntentService会调用单独的线程来处intentIntentService只需要重写onHandleIntent(Intent intent)方法 不需要重写 onBind和onStartCommand方法IntentService是使用单独的线程来完成耗时任务而不会阻塞前台线程 因此前台界面不会失去响应IntentService会自动停止 而不需要调用stopSelfIntentService是Service的子类 它有一些额外的功能startService(intent) stopService(intent)一些重要的系统Service--电话serviceTelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE) ;--短信管理器SmsManagerSmsManager sManager = SmsManager.getDefault();PendingIntent pendingIntent = PendingIntent.getActivity(this,0,new Intent(),0) ;--发送短信sManager.sendTextMessage(numberStr,null,contentStr,pendingIntent,null) ;--发送短信需要设置权限 <uses-permission android:name="android.permission.SEND_SMS">--音频管理器AudioManager audioManager = (AudioManager)getSystemService(Service.AUDIO_SERVICE) ;--闹钟管理器AlarmManager.set--接收广播消息BroadcastReceiver 专门负责监听各种应用程序发出的Broadcast<receveiver android:name=".FirstReceveiver" ><intent-filter android:priority="0"> android:priority --指定优先等级 值越大优先级越高  <action android:name="xxx.xxx">  </intent-filter></receveiver>Intent intent = new Intent();intent.setAction("xxx.xxx");sendBroadcast(intent);--普通的Broadcast不能传给下一个消息接收者sendOrderedBroadcast(intent);--排序的Broadcast可以传给下一个消息接收者 先后顺序可以用 android:priority来定义SELECT * FROM THRSRESUME FOR UPDATE ;SELECT * FROM TPUBCOUNTER FOR UPDATE;BroadcastReceiver可以监听各个应用IntentService是Service的子类 不是普通的Service 增加了些额外的功能--Activity生命周期1 onCreate  --第一次创建时2 onStart   --用户可以看到界面时3 onResume  --用户获取焦点时4 onPause  --与用户失去焦点5 onRestart --用户重新获得界面时6 onStop   --界面用户不可见时7 onDesdroy--调用finish方法时--消息队列中存放两种信息的队列  有线程对象(Runnable)和消息对象(Message)Handler handler = new Handler();handler.post(runnable);handler.postDelayed(runnable,3000);Handler handler = new Handler(){        public void handleMessage(Message msg){               Bundle bundle = msg.getData();               bundle.getString("");        }};public MyHandler(Looper looper){       this.looper = looper ;}Message msg = handler.obtainMessage();Bundle bundle = new Bundle();bundle.putStringbundle.putInthandler.sendMessage(msg);handleMessage(Message msg)ListActivityListViewTabActivityTabHostsetListAdapter(simpleAdapter);handleMessage(Message msg)msg.setData(bundle);bundle.putString("paramName","paramValue");bundle.putInt("paramName",paramValue);-- 系统自带的线程处理类HandlerThread thread = new HandlerThread();MyHandler handler = new MyHandler(thread.getLooper());Message message = handler.obtainMessage();message.sendToTarget();-- looper的作用就是使handler的线程与activity的线程分开 不会使main线程阻塞singleTask 如果在Task中存在栈顶中如果存在该Activity实例则不重新创建public MyHandler(Looper looper){ super(looper);}public void handleMessage(Message msg){   --处理逻辑}Context context = createPackageContext("xxx.io",xxx);Context context = createPackageContext("xx.io",xxx);SharedPreferences sharedPreferences = context.getSharedPreferences();Editor editor = sharedPreferences.edit();以键值对的形式保存在对应的XML中SELECT TE.*,TD.DEPTNAME FROM THRSEMPLOY TE,TUSCDEPT TD WHERE TE.DEPTID = TD.DEPTID(+)SELECT WM_CONCAT(ROWNUM) FROM DUAL CONNECT BY ROWNUM <= 10;singleInstance 只会创建一个目标Activity实例 并会使用一个全新的Task栈 来装载Activity实例singleTask 目标Activity在同一个Task中只含有一个实例 1.如果不存在则会创建新的Activity实例 并放入栈顶2.如果位于栈顶则不会创建新的Activity实例3.如果实例存在但不在栈顶 则把上面的实例从Task栈中移除 使得该实例位于Task栈顶singleTop 如果目标Activity实例位于Task栈顶 则不会新创建对应的实例 否则会创建新的Activity实例standard 每次都会创建一个新的目标Activity实例 而不会创建一个新的Task 并把Activity加入到对应的Task中WITH T1 AS (SELECT ROWNUM AS N1 FROM DUAL CONNECT BY ROWNUM < 10),T2 AS (SELECT 5 AS N2 FROM DUAL)SELECT T1.N1, T2.N2 FROM T1, T2 WHERE T1.N1 = T2.N2(+);Looper使handler处理的线程不是与activity main线程同一个SQLiteOpenHelper是抽象类所以要继承它 并必须重写构造函数public DatabaseOpenHelper(Context context,String name,CursorFactory factory,int Version)所继承的方法中有方法 onCreate onUpgrade 方法 分别是创建数据库还有升级数据库时调用的方法调用getReadableDatabase()或getWritableDatabase()则创建一个数据库 会调用onCreate方法如果 DatabaseOpenHelper helper = new DatabaseOpenHelper(this,"数据库名字",null,2); 当版本指定为2时说明是升级数据库 则会调用onUpgradeSQLiteDatabase db = helper.getWritableDatebase();db.execSQL("CREATE TABLE TEST (ID INT)");ArrayAdapter adapter = new ArrayAdapter(this,R.layout.xxx,数组或list);listView.setAdapter(adapter);继承ListActivity 或者直接使用ListView标签进行使用--插入操作--键值对的对象 键是表示列名ContentValues content = new ContentValues();--key是表中的列名content.put("id",1000);--插入一条数据db.insert("Test",null,content);--更新数据ContentValues content = new ContentValues();content.put("name","9999")db.update("Test",content,"id=?",new String[]{"1"});--把id为1的name设置成9999SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = db.query("Test",new String[]{"name","id"},);-- 遍历cursorwhile(cursor.moveToNext()){       String name = cursor.getString(cursor.getColumnIndex("name"));       sysout(name);}ContentValues SQLiteOpenHelper  Bundle bundle = new Bundle();bundle.putStringbundle.putIntbundle.putFloatbundle.putDouble                                                                                          SELECT T.PID, COUNT(T2.N)  FROM TEXMPAPER T, (SELECT 90 N FROM DUAL) T2 WHERE T.PID = T2.N(+) GROUP BY T.PID;SELECT WM_CONCAT(ROWNUM)  FROM DUAL CONNECT BY ROWNUM<=10 ;--多行的同一列合并成同一行SELECT WM_CONCAT(T.PID) FROM TEXMPAPER T ;MediaPlayer提供下列方法进行对音频文件进行操作start();stop();pause();create();setDatasource();setDatasource调用该方法后并没有完全准备好 需要调用prepare()方法然后再调用start等方法播放网络上的音频文件MediaPlayer player = new MediaPlayer();Uri uri = Uri.parse("http://xxx/xx.mp3");player.setDatasource(context,uri);--准备声音player.prepare();player.start();--还有个准备方法 异步准备音频文件 不会阻塞UI线程player.prepareAsync();--播放视频VideoView 和 MediaControllerVideoView videoView = (VideoView)findViewById(R.id.xxx);MediaController mController = new MediaController(this);File file = new File("/mnt/xxx.mp4");--把视频显示在VideoView组件上videoView.setVideoPath(file.getAbsolutePath());--把VideoView和MediaController结合起来videoView.setMediaController(mController);mController.setMediaPlayer(videoView);--让视频获得焦点videoView.requestFocus();SELECT CONCAT(T.PID||'-',T.PNAME) FROM TEXMPAPER T ;SELECT * FROM THRSINTERVIEW for update;HandlerThread thread = new HandlerThread();thread.getLooper();thread.start();MyDatabaseHelper handler = new MyDatabaseHelper();Message msg = handler.obtainMessage();msg.setData(bundle);msg.sendToTarget();MyDatabaseHelper extents SQLiteOpenHelper{ public MyDatabaseHelper(Looper looper){        super(looper); } public void handleMessage(Message message){         }}handler.post(runnalbe);Runnalbe runnable = new Runnable(){         @Override         public void run(){                --do anything you want          }};handler.postDelayed(runnable,3000);handler.post(runnable);--post方法使消息队列中的任务得到处理Filter when it is good at it OpenFileInputOpenFileOutput--资源图片转换成Bitmap对象Bitmap bitmap = ((BitmapDrawable)context.getResources().getDrawable(R.id.xxxx)).getBitmap();Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),R.drawable.xxxImg);final Matrix matrix = new Matrix();matrix.setTranslate();--当前视图获得焦点this.setFocusable(true);--使得matrix对象重置matrix.reset();matrix.setScale(1.0f,1.0f);Bitmap bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);BitmapFactory是一个工具类createBitmap是Bitmap类的静态方法canvas.drawBitmap(bitmap2,matrix,null);handler不会因为处理业务逻辑的时间过长导致UI线程阻塞HandlerThread thread = HandlerThread();Looper looper = thread.getLooper();public class MyHandler extends Handler{       public MyHandler(Looper looper){              super(looper);       }}select * from test t for update ; ImageView imageView = (ImageView)findViewById(R.id.xxxImg);--ImageView和Bitmap关联在一起时imageView.setImageBitmap(BitmapFactory.decodeFile(filePath));--通过ImageView获得BitmapBitmapDrawable bitmapDrawable = (BitmapDrawable)imageView.getDrawable();Bitmap bitmapx = bitmapDrawable.getBitmap();--AnimationDrawable逐帧动画 它是由ImageView通过getBackground方法来进行获得AnimationDrawable ad = (AnimationDrawable)imageView.getBackground();ad.start() 或 ad.stop();imageView.setBackgroundResources(R.anim.blast);blast.xml<animation-list><item android:drawable="@drawable/bom_01" android:duration="100"/>  <item android:drawable="@drawable/bom_02" android:duration="100"/></animation-list>Intent intent = new Intent();intent.setAction("xxxxx.SecondActivity");action是需要在清单文件 AndroidManifest.xml进行配置的如:<activity android:name=".SecondActivity" android:label="@drawable/secondLabel"><intent-filter>   <action android:name="xxxxx.SecondActivity" />一个activity可以设置多个action name    <action android:name="LSSDDD.XXXX" />  </intent-filter></activity>startActivity(intent)Intent serviceIntent = new Intent();serviceIntent.setAction("xxxService");<service android:name='xx.xx.xxxService'><intent-filter>   <action android:name="xxxService" />为service设置ActionName  </intent-filter></service>startService(intent);Service --->IntentServiceint onStartCommand(Intent intent,int flag,int startId) --->void onHandleIntent(Intent intent)select * from thrsinterview for update ;SELECT * FROM thrsemploy FOR UPDATE ;SELECT * FROM thrsemployeval FOR UPDATE ;public class MyService extends Service{       private int count ;       private boolean quit = false ;       private MyBinder binder = new MyBinder();       public class MyBinder extends Binder{              public int getCount(){                     return count ;              }       }       // 必须返回所绑定的对象       @Override       public IBinder onBinder(Intent intent){              System.out.println("xxxxxxxx");              return binder ;       }       @Override       public void onCreate(){              super.onCreate();              new Thread(){                  @Override                  public void run(){                         while(!quit){                              count++;                         }                  }              }.start();       }        @Override        public void onDestroy(){               super.onDestroy();               this.quit = true ;        }}public class MyBinderService extends Activity{       MyService.MyBinder binder ;       final Intent intent = new Intent();       Button button ;       intent.setAction("binderService");       @Override        public void onCreate(Bundle dxx){             super(dxx);             //intent 通过参数来获得要启动的Service             // conn 监听访问者与Service之间的连接             // 第三个参数表示绑定时是否自动创建Service BIND_AUTO_CREATE表示自动创建             bindService(intent,conn,Service.BIND_AUTO_CREATE);             button = (Button)findViewById('xxxx');             button.setOnClickListener(new OnClickListener(){             @Override              public void onClick(View source){              Toast.makeText(this,"service中的值---->"+binder.getCount(),Toast.LENGTH_SHORT).show();              }             });             unbindService(conn);       }       --只要activity和service一连接就获得对应的Binder对象 就可以通过该绑定对象可以获得service运行的值       private ServiceConnection conn = new ServiceConnection(){              @Override              public void onServiceConnected(Intent intent ,IBinder bind)              {                     binder = (MyService.MyBinder)bind;              }       }}MyBinder extends Binder 就可以访问 MyService里面的值  而在Activity中获得Binder对象则需要通过ServiceConntectionServiceConntection connection = new ServiceConntection(){@Override  public  void onServiceConnected(Intent intent,IBinder service){          binder = (MyService.MyBinder)service ;  }}当程序在调用unbindService(conn) 首先会调用onUnBind方法 然后再调用onDestroy方法









更多相关文章

  1. unity在android显示界面(UnityPlayerActivity)不重复加载且app退出
  2. 三种方法使android 手机执行 二进制程序
  3. Android 使用selector改变按钮状态实例详解
  4. ListView自动滚动方法
  5. android 多线程 AsyncTask handler
  6. IPC与Binder,Binder线程池,AIDL demo - Android
  7. 【JNI】 Android JNI入门实例(Windows+Cygwin+Eclipse)
  8. android投屏和媒体共享相关 && audio focus机制相关 && AudioTra
  9. Android中的Logcat方法查看内核的日志

随机推荐

  1. Own your Android! Yet Another Universa
  2. 杂谈Android线程优先级
  3. 从0系统学Android--5.1 广播机制
  4. Android(安卓)开发热门资料免费下载 110
  5. [置顶] Android学习路线指南
  6. Android调用WebService系列之封装能力
  7. android优化 清除无效代码 UCDetector
  8. android中图片的三级cache策略(内存、文件
  9. 浅析Android防止内存溢出问题
  10. 如何发布你的Android应用程序