疯狂android讲义笔记-大局观

【事件处理】:
分为基于监听和基于回调;
基于回调处理一些具有通用性的事件,代码比较简洁;
无法使用基于回调时使用基于监听的事件处理。


【监听形式】:
内部类形式,外部类形式,Activity本身,匿名内部类形式;
内部类可以在当前类中复用该监听器类,可以自由访问外部类的所有界面组件。
外部类:作为顶级类形式比较少见,因为不利于程序内聚性,不能自由方位类中界面组件。若需要被多个GUI界面共享,完成某种业务逻辑实现,可以考虑。
Activity本身:简洁,但是可能造成程序结构混乱。
匿名内部类:临时使用一次,不复用,使用最广泛。


【回调形式】:
重写组件或者Activity特定的回调方法,自定义组件时应用较广泛。
例子:跟随手指的小球。


【Handler类主要作用】:
在新启动的线程中发送消息;
在主线程中获取处理消息。
消息方式:回调:


【Activity类】:
Activity是以栈的形式存储的,当前活动的Activity位于栈顶。
Activity类似Servlet。
Activity需要在AndroidManifest.xml中配置才能使用。
Activity主要职责:完成界面初始化工作。
启动方式:
startActivity(Intent intent):启动其他Activity;对应关闭方法为finish()
startActivityForResult(Intent intent, int requestCode):以指定请求码(用来标识请求)启动Activity,而且程序会等到新启动Activity的结果(通过重写OnActivityResult()来获取)。对应关闭方法为finish(int requestCode)。
Activity四种状态:
活动状态:可见,获得焦点;OnCreate
暂停状态:可见,失去焦点;OnPause,OnResume(游戏暂停,返回桌面)
停止状态:不可见,失去焦点;OnStop,OnRestart
销毁状态:Activity结束。OnDestroy


【Bundle类】:
主要作用:在Activity之间传递数据。(借由Intent的putExtras(Bundle data)和getExtras()).
putXxx(String key, Xxx data):向Bundle放入Int、Long等各种数据。对应取出为getXxx(String key)。
putSerializable(String key, Serializable data):向Bundle中放入一个可序列化的对象。对应取出为getSerializable(String key,Serializable data)。




【输出日志】:Log.d(TAG, "content");


【Intent类】:
启动Activity,Service,BroadcastReceiver和其他组件及其通信交换信息。
启动:
startActivity(Intent intent)
startActivityForResult(Intent intent, int requestCode)
startService(Intent service)
bindService(Intent service, ServiceConnection conn, int flags)
BroadcastReceiver的启动有8种方法


【android的数据存储和io】:
SharedPreferences:(一般用于存储参数设置)
存储少量简单格式的数据。可以读写其他应用的SharedPreferences(前提是获得权限)。需要用到Context类。
File:
读写手机存储或者SD卡的文件。
SQLite:
轻量级数据库,只是一个文件而已。
ContentProvider:(配合ContentResolver)
不同应用间共享数据。可理解为一个网站供浏览查询。如联系人、短信、照片等多媒体内容(对应Uri即可)。可监听数据改变,使用ContentObserver
使用Uri访问:如content://org.crazyit.providers.dictprovider/word/2


【清除缓存】可以清除的内容有:
内外缓存,数据库,SharedPreferences,files和自定义内容
/data/data/com.xxx.xxx/cache - 应用内缓存(注:对应方法getCacheDir())
/data/data/com.xxx.xxx/databases - 应用内数据库
/data/data/com.xxx.xxx/shared_prefs - 应用内配置文件
/data/data/com.xxx.xxx/files - 应用内文件(注:对应方法getFilesDir())


【Service类】:
主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务。必要的时候我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态。
要在AndroidManafest.xml中配置,可指定被哪些Intent启动。很类似Activity,只是没有界面。
可以远程跨进程调用Service(AIDL服务,然后在其他程序里绑定Service),类似Java的RMI。
启动:
startService(Intent service);stopService(intent)停止服务。
bindService(Intent service, ServiceConnection conn, int flags)。
绑定:bindService(Intent service, ServiceConnection conn, int flags),unbindService()
重写父类的onCreate()、onStartCommand()和onDestroy()。
setForeground(true) 来设置 Service 的优先级。(结合Notification通知,便是前台Service)。
android:persistent="true"属性后的确就能够达到保证该应用程序所在进程不会被LMK杀死。但有个前提就是应用程序必须是系统应用,也就是说应用程序不能采用通常的安装方式。必须将应用程序的apk包直接放到/system/app目录下。而且必须重启系统后才能生效。
Service和Thread之间没有任何关系!Service其实是运行在主线程里的。
Activity创建的子线程很难控制,容易被销毁,而Service则不会。


【其他实用类】:
TelephoneyManager类:管理收集通话状态、电话网络信息的服务类。
SmsManager类:短信相关的服务类。(sendXxxMessage()系列方法如sendTextManager())。
AudioManager类:系统音量模式类。
Vibrator类:控制手机震动的类。
AlarmManager:手机闹钟定时器服务。
WallpaperManager:壁纸管理
MediaPlayer:可用来播放音频。
SoundPool:用来播放音效。
VideoView:播放视频。
SurfaceView与MediaPlayer:播放视频。
MediaRecoder:录制音频和视频。
Camera:拍照,三维空间变换。
Gesture:手势事件。
TTS:自动朗读。
Bitmap:图像。
Canvas、Paint、Path:绘图。
Matrix:矩阵工具,可用来做图形特效处理。
AnimationDrawable:逐帧动画。<animotion-list.../>与<item.../>定义全部帧以及持续时间。
Interpolator:补间动画。实现类:LinearInterpolator、AccelerateInterpolator、AccelerateDecelerateInterpolator、CycleInterpolator、DecelerateInterpolator。
Animotion子类:AlphaAnimotion、ScaleAnimotion、TranslateAnimotion、RotateAnimotion。
SurfaceView:也可以用来做动画。
GLSurfaceView:3D图形(需要Render)。
DownloadThread:下载线程。


【网络应用】:
ServerSocket:创建TCP服务器端。
Socket通信:getInputStream(),getOutputStream()。(加入多线程可实现聊天室功能)
URL:访问网络资源,OpenConnection(),OpenStream()。
URLConnection:提交请求,setRequestProperty(String key, String value)设置参数,connect()发送请求,getInputStream()读取输入流。发送Post请求需要加setDoOutput(true);setDoInput(true);发送时需要getOutPutStream()后再PrintWriter.print();PrintWriter.flush();。
HttpURLConnection:继承自URLConnection,添加getResponseCode(),getResponseMessage(),getRequestMethod(),setRequestMethod(String method)方法。例子:多线程下载。简单页面请求和响应,用这个即可。
HttpClient(Apache):用户需登录、权限才可访问页面的情况。但是不缓存服务器响应,不能执行HTML中嵌入的JavaScript,也不对页面内容进行任何解析和处理。发送请求:HttpGet和HttpPost,方法有:setParams(HttpParams params),HttpPost对象还可调用setEntity(HttpEntity entity)。使用HttpClient.execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse,HttpResponse方法:getAllHeaders(),getHeaders(String name),getEntity()。需要登陆才可访问的页面,第一次需要登录,然后就可以访问了。
WebView:浏览网页。
Web Service:消除不同平台不同语言之间的实现差异,可将现有应用程序发布成开放式服务。


【在桌面上创建快捷方式】:
intent的Action设为com.android.laucher.action.INSTALL_SHORTCUT,添加Extras形式添加快捷方式的标题图标快捷方式对应启动的程序,调用sendBroadcast(intent)方法即可。


【传感器】:常用有方向、加速度、磁场、温度、光、压力、重力、距离、陀螺仪传感器。
1、调用Context的getSystemService(Context.SENSOR_SERVICE)方法获取SensorManager对象,用以管理传感器;2、调用SensorManager的getDefaultSensor(int type)方法获取指定类型的传感器;3、一般在Activity的onResume()方法中调用SensorManager的registerListener(SensorEventListener listener, Sensor sensor, int rate)为指定传感器注册监听器即可,使用监听器获取传感器传回来的数据。


【GPS应用开发】:
需要获取权限,在AndroidManafest.xml中加:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
就可以用了。
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);//获取定位管理
LocationProvider locationProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
location.getSpeed();
location.getBearing();//获取方向
API23以上在获取Location时需要加以下判断代码,因为用户可能不同意被获取信息。
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                    || ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值