Android基础知识——完善

×

Android基础知识——完善

2016.05.17 10:29* 字数 5478 阅读 2672 评论 1

疯狂Android摘要,Android基础知识好乱好乱,一团浆糊。配合自己过去在CSDN写的这下应该是全了吧...

1.编码之前

<1>.Android运行时由ART和Android核心库集组成,由于Dalvik虚拟机采用 JIT(Just-in-time)解释器进行动态编译,导致App运行比较慢。ART模式 :是用户安装App时进行编译(Ahead-of=time,简称AOT )从而减少动态编译上的开销,提升Android中应用的运行效率。另外ART还支持ARM、x86、MIPS架构,并且完全兼容64位操作系统

<2>.Android建立在Linux2.6之上

<3>.android.bat工具

  • android list : 列出机器上已经安装的android版本和AVD设备
  • android avd :列出机器上所有已经安装的AVD设备
  • android list target : 列出机器上所有已经安装的AVD设备
  • android create avd -n <avd名称> -t<Android版本> -b <cpu架构> -p<AVD设备保存位置> -s<选择AVD皮肤> : 创建一个AVD设备【例:android create avd -n doing -t 21 -b armeabi-v7a
  • android move avd : 移动或重命名一个AVD设备
  • android delete avd : 删除一个AVD设备
  • android update avd : 升级一个AVD设备使之符合新的SDK环境
  • android create project -n <项目名称> -t <android平台> -p <项目的保存路径> -k <该项目的包名> -a <指定Activity的名称> : 创建一个已有的Android项目【例:android create project -n HelloWorld -t android-21 -p HelloWorld -k com.doing.helloword -a HelloWorld
  • android update project : 更新一个已有的Android项目
  • create test-project : 创建一个新的Android项目

<4>.Montior面板使用进行调试

  • 线程跟踪面板,通过在设备面板上选中需要查看的进程,然后再设备面板中单机 Update Threads 按钮,这样当前的进程中的线程信息会显示在该面板中
  • Heap内存管理面板,用于查看指定进程内退内存的分配和回收信息。通过在设备面板中选中指定进程,然后点击设备面板中的 Upddate Heap 按钮,即可查看

<5>.Ant工具,是一个简洁易用的项目生成工具。下载点:【http:\ant.apache.org/bindownload.cig 】需要配置
Java_Home和Ant_Home环境变量

  • ant clean : 清除项目生成的内容
  • ant debug : 打包一个调试用的Android应用的APK包,使用debug key进行签名
  • ant release : 打包一个发布用的Android应用的APK包
  • ant test : 运行测试,要求该项目必须是一个测试项目
  • ant install : 将生成的调试用的APK包安装到模拟器上
  • ant uninstall : 从模拟器上卸载应用程序

<6>.R文件 是由AAPT工具根据应用中的资源文件自动生成的,就是Android应用的资源字典

<7>.应用签名

  • a.确定发布者身份
  • b.保证应用的完整性,签名会对应用的每个文件进行处理,从而确保程序包中的文件不会被替换

<8>.手动签名步骤(注:JDK中自带签名工具 keytool.exe )

步骤一:手动生成签名文件:keytool -genkeypair -alias doing -keyalg RSA -validity 400 -keystore doing.jks

  • -genkeypair : 指定生成数字证书
  • -alias : 指定生成数字证书的别名
  • -keyalg : 指定生成数字证书的算法。使用RSA算法
  • -validity : 指定生成的数字证书的有效期
  • -keystore : 指定生成的数字证书的存储路径

步骤二:生成一个未签名的apk文件通过AS,并且未签名文件是【app-release-unaligned.apk】

步骤三:手动签名应用:jarsigner -verbose -keystore doing.jks -signedjar HelloWorld_doing.apk app-release-unaligned.apk doing

  • -verbose : 指定生成详细输出
  • -keystore : 指定数字证书的存储路径
  • -signedjar : 三个参数分别是 签名后的apk包、未签名的apk包、数字证书的别名

2.布局组件

<1>.ViewGroup.LayoutParams(布局管理器参数)一般控件通过setLayoutParam()设置布局参数,位置参数通过这个类来设置,如width、height、weight、gravity等

android:layout_height : 指定该子组件的布局高度
android:layout_width : 指定该子组件的布局宽度

<2>.ViewGroup.MarginLayoutParams(组件四周的留白)

android:marginBottom、marginLeft、marginTop、marginRight        setMargins(int,int,int,int);    指定该组件的外边距

<3>.布局管理器

  • LinearLayout

布局参数

android:baseLineAligned-->setBaseLineAligned(boolean)-->该属性设为false,将会阻止该布局管理器与它的子元素的基线对齐
android:divider-->setDividerDrawable(Drawable)-->设置垂直布局时两个按钮之间的分隔条
android:gravity-->setGravity(int)-->设置布局管理器内组件的对其方式。该属性支持top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical、clip_horizontal。可以指定多种对齐方式,如left|clip_vertical,代表在屏幕左边,并且上下居中,内容太长超出父容器会裁剪
android:measureWithLargestChild-->setMessureWithLargestChildEnabled(boolean)    -->当该属性为true时,所有带权重的子元素都会具有最大子元素的最小尺寸
android:orientation-->setOrientation(int)-->设置布局管理器内组件的排列方式,horizontal、vertical

LinearLayout.LayoutParams

android:gravity             指定该子元素在LinearLayout中的对其方式
android:layout_weight        指定该子元素在LinearLayout中的所占的权重
  • TableLayout,继承了LinearLayout,使用TableLayout标签中添加TableRow标签,此标签表示表格的一行,其中有多少元素就有多少列数据

布局参数

android:collapseColoumns    setColumnCollapsed(int,boolean)        设置需要被隐藏列的序号,多个列号之间用逗号隔开
android:shrinkColumns        setShrinkAllColumns(boolean)        设置允许被收缩列的序号,多个列序号之间用逗号隔开
android:strechColumns        setStrtchAllColumns(boolean)        设置允许被拉伸列的序号,多个列序号之间用逗号隔开
  • FrameLayout

布局参数

android:foreground                setForeground(Drawable)            设置该帧布局容器的前景图像
android:foregroundGravity        setForegroundGravity(int)        定义绘制前景图像的gravity属性
  • RelativeLayout

布局参数

android:gravity             setGravity(int)                设置该布局容器内各子组件的对齐方式
android:ignoreGravity        setIgnoreGravity(int)        设置哪个组件不受gravity属性的影响

RelativeLayout.LayoutParams

android:layout_centerHorizontal            控制该子组件是否位于布局容器的水平居中(boolean)
android:layout_centerVertical            控制该子组件是否位于布局容器的垂直居中(boolean)
android:layout_centerInParent            控制该子组件是否位于布局容器的中央位置(boolean)
android:layout_alignParentBottom        控制该子组件是否位于布局容器底端对齐(boolean)
android:layout_alignParentLeft             控制该子组件是否位于布局容器左边对齐(boolean)
android:layout_alignParentRight         控制该子组件是否位于布局容器右边对齐(boolean)
android:layout_alignParentTop            控制该子组件是否位于布局容器顶端对齐(boolean)
android:layout_toRightOf                控制该子组件位于给出ID组件的右侧(int 类型ID值)
android:layout_toLeftOf                    控制该子组件位于给出ID组件的左侧(int 类型ID值)
android:layout_above                    控制该子组件位于给出ID组件的上方(int 类型ID值)
android:layout_below                    控制该子组件位于给出ID组件的下方(int 类型ID值)
android:layout_alignTop                 控制该子组件与给出ID组件的上边界对齐(int 类型ID值)
android:layout_alignBottom                 控制该子组件与给出ID组件的下边界对齐(int 类型ID值)
android:layout_alignLeft                 控制该子组件与给出ID组件的左边界对齐(int 类型ID值)
android:layout_alignRight                 控制该子组件与给出ID组件的右边界对齐(int 类型ID值)
  • GridLayout,网格布局,她是Android4.0新增的布局管理器。使用方式类型Html中的Table

布局参数

android:alignmentMode             setAlignmentMode(int)                设置该布局管理器采用的对齐方式
android:columnCount                setColumnCount(int)                    设置该网格的列数量
android:columnOrderPreserved    setColumnOrderPreserved(boolean)    设置该网格容器是否保留列序号
android:rowCount                setRowCount(int)                    设置给网格的行属性
android:rowOrderPreserved        setRowOrderPreserved(boolean)        设置该网格容器是否保留行序号
android:useDefaultMargins        setUseDefaultMargins(boolean)        设置该布局管理器是否使用默认的页边距

GridLayout.LayoutParams

android:layout_column                            设置该子组件在GridLayout的第几列
android:layout_columnSpan                        设置该子组件在GridLayout横向上跨几行
android:layout_gravity        setGravity(int)        设置该子组件采用何种方式占据该网络的空间
android:layout_row                                设置该子组件在GridLayout的第几行
android:layout_rowSpan                             设置该子组件在GridLayout纵向上跨几行

示例代码:(计算器页面实现)

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:rowCount="6"        //6行
    android:columnCount="4"        //4列
    android:id="@+id/root"
    />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_columnSpan="4"        //横跨4列
        android:textSize="50sp"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="2dp"
        android:padding="3dp"
        android:layout_gravity="right"
        android:background="#eee"
        android:textColor="#000"
        android:text="0"
    />
    <Button
        android:layout_widht="match_parent"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:text="清除"
    />
</GridLayout>

public class MainActvity extends Activity{

    String[] chacBuf = new String[]{"7","8","9","÷","4","5","6","x","1","2","3","-",".","0","=","+"};

    public void onCreat(Bundle saveInstanceState){
        super.onCreat(savedInstanceState);
        setContentView(R.layout.main);
        GridLayout gridLayout = (GridLayout)findViewById(R.id.root);
        for(int x=0; x<chacBuf.length ; x++){
            Button btn = new Button(this);
            btn.setText(chacBuf[x]);
            btn.setTextSize(40);
            btn.setPadding(5,35,5,35);
            //设置按钮的位置,第一列第几行,通过LayoutParams设置给该按钮
            GridLayout.Spec columnSpec = GridLayout.spec(i % 4);
            GridLayout.Spec rowSpec = GridLayout.spec(i / 4 + 2);
            GridLayout.LayoutParams params = new GridLayout.LayoutParams(rowSpec,columnSpec);
            params.setGravity(Gravity.FILL);
            gridLayout.addView(btn,params);
        }
    }
}
  • AbsoluteLayout,通过layout_x和layout_y设置子组件的X、Y 坐标位置

3.UI组件

习惯把变化小,行为比较固定的组件放在XML布局文件中管理;而那些变化多行为控制比较复杂的组件泽交给Java代码来管理。

2.TextView体系详解.jpg

<1>.Switch

android:checked                    setChecked(boolean)                设置该开关是否被选中
android:switchMinWidth            setSwitchMinWidth(int)                设置快关的最小宽度
android:switchPadding            setSwitchPadding(int)                    设置开关与标题文本之间的空白
android:switchTextAppearance    setSwitchTextAppearance(Context,int)    设置该开关图标上的文本样式
android:textOff                    setTextOff(CharSequence)                设置该开关的状态关闭时显示的文本
android:textOn                    setTextOn(Charsequence)                    设置该快关的状态打开时显示的文本
android:textStyle                setSwitchTypeFace(Typeface)                设置开关的文本风格
android:thumb                    setThumbResource(int)                    指定使用自定义Drawable绘制该开关的开关按钮
android:track                     setTrackResource(int)                    指定使用自定义Drawable绘制该开关的开关轨道
android:typeface                 setSwitchTypeface(TypeFace)                设置开关的文本的字体风格

<2>.TextClock

android:format12Hour    setFormat12Hour(Charsequence)    设置该时钟的12小时制的格式字符串
android:format23Hour    setFormat24Hour(Charsequence)    设置该时钟的24小时制的格式字符串
android:timeZone        setTimeZone(String)                设置该时钟的时区

<3>.AnalogClock

android:dial             设置该模拟时钟的表盘使用的图片
android:hand_hour        设置该模拟时钟的时针使用的图片
android:hand_minute        设置该模拟时钟的分针使用的图片

<4>.Chronometer

setBace(long base)             设置计时器的起始时间
setFormart(String format)    设置显示时间的格式
start()                        开始计时
stop()                        停止计时
setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener)     为计时器绑定事件监听器,当计时器改变时触发该监听器

<5>.ImageView

3.ImageView体系详解.jpg
android:adjustViewBounds    setAdjustViewBounds(boolean)    设置ImageView是否调整自己的边界来保持所显示图标的长宽比
android:cropToPadding        setCropToPadding(boolean)        如果将该属性设置为true,改组件将会被裁剪到保留该ImageViewpadding
android:maxHeight            setMaxHeight(int)                设置ImageView最大高度
android:maxWidth            setMaxWidth(int)                设置ImageView最大宽度
android:src                 setImageResource(int)            设置ImageView所显示的Drawable对象
android:scaleType            setScaleType(ImageView.ScaleType)    设置显示的图片如果缩放或者移动来适应的ImageView的边界

<6>.AbsListView

4.AdapterView体系结构.jpg
5.Adapter体系结构.jpg
android:choiceMode                                                设置AbsListView的选择行为。none:不显示任何选中项;singleChoice:允许单选;multipleChoice:允许多选
android:drawSelectorOnTop    setDrawSelectorOnTop(boolean)        如果该属性设置为true,选中的列表项将会显示在上边
android:fastScrollEnabled                                        设置是否允许快速滚动。如果该属性设置为true,将会显示滚动图标,并允许用户拖动该滚动图标进行快速滚动
android:listSeletor            setSelector(int)                    指定被选中的列表项绘制的Drawable
android:scrollingCache                                            如果设置为ture,该组件在滚动时将会使用绘制缓存
android:smoothScrollbar        setSmoothScrollbarEnable(boolean)    如果设置为false,则不在headerView之后绘制分隔条
android:stackFromBotton                                            设置是否从底端开始排列列表项
android:textFilterEnable                                        设置是否对列表项进行过滤。当该AbsListView对应的Adapter实现了Filter接口时该属性才会起作用
android:transcriptMode                                            设置该组件的滚动模式。disable:关闭滚动,这是默认值;normal:当该AbsListView收到数据改变通知,且租后一个列表项可见时,该AbsListView将会滚动到低端;alwaysScorll:该AbsListView总会自动滚动到低端

<7>ListView

android:divider                     设置List列表项的分隔条(可以使用颜色或则Drawable对象)
android:dividerHeight                设置分隔条的高度
android:entries                        指定一个数组资源,Android 将根据该数组资源来生成ListView
android:footerDividersEnable        如果设置为false,则不在footer view之间绘制分隔条
android:headerDividersEnable        如果设置为false,则不在header view之间绘制分隔条

<8>.GridView

android:columnWidth            setColumnWidth(int)            设置列的宽度
android:gravity             setGravity(int)             设置对其方式
android:horizontalSpacing    setHorizontalSpacing(int)    设置个元素之间的水平间距
android:numColumns            setNumColunms(int)            设置列数
android:stretchMode            setStretchMode(int)            设置拉伸模式。NO_STRETCH:不拉伸;STRETCH_SPACING:仅拉伸元素之间的间距;STRETCH_SPACING_UNIFORM:表格元素本身、元素之间的间距一起拉伸;STRETCH_COLUMN_WIDTH:仅拉伸表格元素本身
android:verticalSpacing        setVerticalSpacing(int)        设置各元素之间的垂直间距

<9>.AutoCompleteTextView:提示文本框

android:completionHint            setCompletionHint(Charsequence)        设置下拉菜单中的提示标题
android:completionHintView                                            设置下拉菜单中提示标题的视图
android:completionThreshold        setThreshold(int)                    设置用户至少输入几个字符才会显示提示
android:dropDownAnchor            setDropDownAnchor(int)                设置下拉菜单的定位"锚点"位置,如果没有指定该属性,将使用该TextView本身作为"锚点"组件
android:dropDownHeight            setDropDownHeight(int)                设置下拉菜单的高度
android:dropDownHorizontalOffset                                    设置下拉菜单与文本框之间的水平偏移,默认与文本框左对齐
android:dropDownVerticalOffset                                        设置下来菜单与文本框之间的垂直偏移,默认紧跟文本框
android:dropDownWidth            setDropDownWidth                    设置下拉菜单的宽度
android:popupBackGround            setDropDownBackgroundResource(int)    设置下来菜单的背景

<10>.ExpandableListView

6.ExpandableListAdapter体系结构.jpg
android:childDivider        指定各组内个子列列表项之间的分隔条
android:childIndicator        显示在子列表项旁边的Drawable对象
android:groupIndicator        显示在组列表项旁边的Drawable对象

<11>.Spinner

android:entries                                                            使用数组资源设置该下拉列表框的列表项
android:dropDownHorizontalOffset    setDropDownHorizontalOffset(int)    设置列表选择框的水平偏移距离
android:dropDownVerticalOffset        setDropDownVerticalOffset(int)        设置列表选择框的垂直偏移距离
android:dropDownWidth                 setDropDownWidth(int)                设置列表选择框的宽度
android:popupBackGround                setPopupBackGround                    设置列表选择框的背景色
android:prompt                                                            设置该列表选择框的提示信息

<12>.AdapterViewAnimator

8.ViewAnimator体系结构.jpg
android:animateFirstView            设置显示该组件的第一个View时是否使用动画
android:inAnimation                    设置组件显示时使用的动画
android:loopViews                    设置循环到最后一个组建后是否自动转动到第一个组件
android:outAnimation                设置组件隐藏式使用的动画

<13>.AdapterViewFilpper

android:autoStart        startFlipping()            设置显示该组件是否自动播放
android:flipInterval    setFlipInterval(int)    设置自动播放的时间间隔
7.ProgressBar体系结构.jpg

<14>.ProgressBar

android:max                         设置该进度条的最大值
android:progress                     设置该进度条已完成的进度值
android:progressDrawable            设置该进度条的轨道对应的Drawable对象(可配置<layer-list>Xml 文件)
android:indeteminate                该属性为true,设置进度条不精确显示进度
android:indeteminateDrawable        设置绘制不显示进度的进度条的Drawable对象
android:indeteminateDuration        设置不精确显示进度的持续时间

<15>.

CalendarView:日历视图
DatePicker:日期选择器
TimePicker:时间选择器
NumberPicker:数值选择器

<16>.自定义UI组件

onFinishInflate() : 这是一个回调方法,当应用从XML布局文件加载该组件并利用它重构界面之后,该方法被回调。
onMeasure(int,int) : 调用该方法来检测View组件及其所包含的所有子组件大小
onLayout(boolean,int,int,int,int) : 当该组件需要分配其子组件的位置、大小时,该方法会被回调
onSizeChanged(int,int,int,int) : 当该组件的大小被改变是回调该方法
onDraw(Canvas) : 当该组件将要绘制他的内容时回调该方法进行绘制,会被invalidate()触发。
onKeyDown(int,keyEvent) : 当某个键被按下时触发该方法
onKeyUp(int,keyEvent) : 当松开某个键时被触发
onTrackballEvent(MotionEvent) : 当发生轨迹球事件时触发该方法(貌似轨迹球是过去手机的按键)
onTouchEvent(MotionEvent) : 当发生触摸屏事件时触发该方法
onFocusChanged(boolean gainFocus,int direction,Rect previouslyFocusedRect) : 当该组件焦点发生改变时触发该方法
onWindowFocusChanged(boolean) : 当包含该组件的窗口失去或得到焦点是触发该方法
onAttachedToWindow() : 当把该组件放入某个窗口是触发该方法
onDetachedFromWindow() : 当把该组件从某个窗口上分离时触发该方法
onWindowVisbilityChanged(int) : 当包含该组件的窗口的可见性发生改变时触发该方法

<17>.事件传递机制

  • 1.最先考虑的就是点击位置外层控件是否有任何一层拦截了事件,最外层包括Activity
  • 2.然后考虑传递到指定View后,先触发是我们自定义设置的Listenser,如setOnTouchListener()。然后是之后的控件自身的onTouchEvent()方法。其中任何一个方法返回true,事件将不再向外传递,从而被消费掉
  • 3.最后传递到的是Activity响应的回调方法,如onTouchEvent()或者onKeyDown()

<18>.超零碎知识点

  • ProgressDialog,自带ProgressBar的Dialog
  • 布局文件中可以设置 weightSum属性,表示指定了子控件weight值之和的最大值。
  • android:clipChildren="false" 不限制子控件的在其范围内,子控件大小能超出父控件范围
  • FragmentPagerAdapter:所有填充Fragment页面都会保存在内存中,所以只适合页面数量较少的情况
  • FragmentStatePagerAdapter:只保留当前所见页的Fragment在内存中,离开视线后会消除该Fragment,减少内存的开销
  • 给TextView或者EditText设置末尾图片的方法:(这个为什么会有,不过当时我随笔记了肯定有特殊的地方...)
    • drawableRigth或者drawbleEnd属性,不过后者有兼容性问题
    • 给EditText和ImageView控件设置一个RelativeLayout父布局控件,然后调整位置。最后给EditText设置一个shape图形来绘制框线
  • view.getResources().getIdentifier("square_" + i,"id", view.getContext().getPackageName());可以通过Id字符串来获取Id值

<18>.手势识别

使用方法:

  • 创建该对象时需要传入 GestureDetector.OnGestureListener 对象,这是一个监视器,监视用户的手势

  • 需要把要处理的事件交给GrestureDetector对象的onTouchEvent()处理

      public boolean onTouchEvent(MotionEvent me){
          return gestureDetector.onTouchEvent(me);
      }
    

GestureDetector.OnGestureListener---接口

boolean onDown(MotionEvent e);——当触碰事件按下时触发该方法
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);——当用户手指在触摸屏上“拖过”是触发该方法,其中velocityX,volecityY表示“拖过”动作的的速度
void onLongPress(MotionEvent e);——当用户手指在屏幕上长按时触发该方法
onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);——当用户手指在屏幕上“滚动”时触发该方法
void onShowPress(MitonEvent e);——当用户手指在屏幕上按下,而且还为移动或者松开时触发该方法
boolean onSingleTapUp(MotionEvent e);——用户手指在触摸屏上轻击事件将会触发

GestureDetector.OnDoubleTapListener---接口,双击

onDoubleTap(MotionEvent e);——双击事件
onDoubleTapEvent(MotionEvent e);——双击间隔中发生的动作。指触发onDoubleTap以后,在双击之间发生的其他动作,包含down、move、up
onSingleTapConfirmed(MotionEvent e);——单击事件。用来判断是单机而不是双击,双击时不触发

GestureDetector.SimpleOnGestureListener---类,实现了以上连个接口

ScaleGestureDetector--缩放手势识别,不是GestureDetector的子类

onScale(ScaleGestureDetector detector);——缩放中
onScaleBegin(ScaleGestureDetector detector);——缩放开始,返回ture才会触发之后的onScale()方法
onScaleEnd(ScaleGestureDetector detector);——缩放手势结束

ScaleGestureDetector.SimpleOnScaleGestureListener---类

博文推荐: 用户手势检测-GestureDetector使用详解


3.Big组件

9.Acitvity体系结构.jpg

<1>.组件启动模式的科学说法(过去自己描述的好白痴...)

  • standard模式,默认模式,总会为目标Activity创建一个新的实例,并且在当前Task栈中

  • singleTop模式,当要启动的Activity位于Task栈顶,系统不会创建新的Activity实例,直接复用已有的Activity实例。自己绝对不会在创建自己

  • singTask模式,Activity在同一Task栈内只有一个实例。三种情况:

    a.启动的Activity在Task栈中不存在,就是普通的创建一个Activity实例

    b.启动的Activity在Task栈中位于栈顶,此时与SingleTop模式相同

    c.启动的Activity在Task中存在但并不位于栈顶,系统会把该Activity实例上的所有Activity移出栈,从而让目标Activity转入栈顶

  • singleInstance模式,无论从哪个Task启动目标Activity,只有创建一个目标Activity实例,并且使用一个全新的Task栈来装载该Activity实例。如果目标Activity需要别的应用能够打开,需要设置为此种模式

<2>.Fragment作用:对UI组件进行分组、模块化管理,我们可以更方便的在运行过程中动态更新Activity用户界面。我们可以把模块的UI组件抽取到不同Fragment中,然后再平板和手机中做不同的组合来达到适配效果,减少代码的逻辑。

<3>.Fragment的onDetach()生命周期方法在Fragment被替换亦是remove()后,不过加入了addOnBackStack()中,那么不会触发。如果只是hide()

<4>.FragmentManager中方法————popBackStack()、addOnBackStackChangeListener()

<5>.屏幕的适配

  • 首先从代码设计上可谈,尽量对不同类的组件进行模块化分组,使用Fragment管理一个模块。从而在手机和平板设备中适配时非常方便。大大减少重复代码的书写,提高代码的复用性
  • 分辨率适配就是那一大堆了....

<6>.Intent中可以配置的属性(可以根据以下前三组数据开启Activity)

Component属性:就是包名(Context)和开启的字节码文件对象

Action、Category:只是普通的任意字符串数据,每一个Intent中都存放了一个默认的

  • Intent中:只能存有一个Action,能存放多个Category属性
  • Intent-filter中:能存放多个Action与Category属性,只能存放一个Data属性

Data:存放数据,接受一个Uri对象,数据格式为【scheme://host:port/path

Type:指定该Data中Uri数据的MIME类型,格式为【abc/xyc】

注意:如果给Intent单独设置data和type,后设置的会覆盖先设置的。需要同时设置data和type需要使用setDataAndType()方法

在清单文件中设置Data属性通过

<data android:mimeType="" android:scheme="" android:host="" android:port="" android:path="" android:pathPrefix="" android:pathPattern="">

Extra属性:就是存储一个Bundle对象
Flag属性:

FLAG_ACTIVITY_BROUGHT_TO_FRONT:如果启动的Activity已经存在,下次再次启动时,将只是把该Activity带到前台。例如Activity——A,B,C。B 是以这种模式打开,A 打开 B,B 启动 C、D,然后 D 中又启动 B
                                这时直接把Activity栈中的 B 带到前台。此时的Activity栈中情形是 A、C、D、B
FLAG_ACTIVITY_CLEAR_TOP:该Flag相当于加载模式中的singleTask。会弹出目标Activity之上的所有Activity
FLAG_ACTIVITY_NEW_TASK:默认的启动标志,控制重新创建一个新的Activity
FLAG_ACTIVITY_NO_ANIMATION:该标志启动的Activity不会使用过渡动画
FLAG_ACTIVITY_NO_HISTORY:该标志启动的Activity不会保留在Activity栈中
FLAG_ACTIVITY_SINGLE_TOP:相当去启动模式的SingleTop
FLAG_ACTIVITY_REORDER_TO_FRONT:控制已有Activity,直接将该Activity带到前台

<7>.BroadcastReceiver:可实现不用应用程序之间的通信,是一个全局的监听器,实现不同组件之间的通信。通过sendBroadcast()sendOrderedBroadcast()来启动指定的BroadcastReceiver

<8>.Service服务

  • startService()——访问者与Service之间没有关联,即使访问者退出了,Service 也仍然运行。两者不能交换数据、方法调用
  • bindService()——访问者与Service之间绑定在一起,访问者一旦退出,Service 也就终止了。如果两者需要联系需要使用这种开启方式

startService()启动会触发onCreat()onStartCommand(),并且onCreat()只有第一次创建时被触发,多次调用startService()方法只会触发onStartCommand()方法

bindService(Intent service, ServiceConnection conn, int flags);
  • conn:这个 ServiceConnection 对象主要用来监听访问者与Service之间的连接情况,成功时会回调其onServiceConnected(ComponentName name, IBinder service)方法,这个IBinder是Service中onBind(Intent intent)的返回值。当访问者因为一场终止,导致该Service与访问者之间断开连接时回调该 onServiceDisConnected(ComponnetName name)方法
  • flags:绑定时是否自动创建Service。可以为0或者BIND_AUTO_CREATE

混合开启服务的意义:在于 startService()开启服务,bindService()建立联系,unBindService()断开联系 bundService()再次建立联系,重写Service中onUnBind()让其放回return true;这样onReBind()会触发。
unBindService()只会断开联系,不会关闭服务。只有stopService()才可以。因为Service是通过startService()建立的

Service存在的问题:

  • Service 不会专门启动一个单独的进程,Service 与它所在应用在同一进程中
  • Service 不是一条新的线程,因此不应该在Service中直接处理耗时的任务

<8>.IntentService:内部封装了线程池的Service,可以处理耗时操作

使用方法:IntentService只需要复写该方法——onHandleIntent(),在该方法中处理耗时的操作。

优势:

  • 可以处理耗时操作
  • 所有请求处理完成后,IntentService 会自动停止,因此无须调用stopSelf()来结束自己

<9>.超杂乱知识点

  • 实际上Activity是一个Window的容器,Activity 包含一个getWindow()方法,该方法返回该Activity所包含的窗口
  • Activity 包含了一个setTheme(int resid)方法来设置其窗口的风格,是否包含标题栏ActionBar,对话框形式显示窗口等,对话框主题值为Theme.Dialog
  • getWindow().setBackgroundDrawableResource(R.drawable.black);设置window的背景
  • getWindow().setTile(str);设置window的标题
  • getResources().getIdentifier(id名,"id", view.getContext().getPackageName());通过字符串获取控件id值
  • Configuration对象记录了当前的系统状态信息,包括键盘、屏幕方向、用户当前所在地等等。Activity中有onConfigurationChanged()的监听方法,当状态改变时会触发该方法。不过需要我们在
    Activity中注册配置下【android:configChanges="orientation|screenSize"】可让Activity监听到系统状态的改变。

4.资源

<1>.Resources:可以获取程序的实际资源的类

resources.getXml(int id);可获取到Xml文档,并且返回XmlPullParser解析器对象
resources.openRawResource(int id);获取资源文件的输入流

<2>.样式与主题

样式:style作用于一个控件

主题:style作用于指定或者所有Activity,查找系统所有内置主题可以输入 android.R.style.任意主题,然后ctrl+左键点进去就能看到了
启用Material主题:给系统主题设置为android:Theme.Material.Xxx这种即可

<3>.BitmapDrawable,图片资源的Drawable

<4>.StateListDrawable,就是选择器<selector/>。选择器可以设置Drawable图片资源或者Color颜色资源。可以个EditText设置颜色选择器来让其有无焦点显示不同颜色

<5>.LayerDrawable,是<layer-list>可以把多个drawable图片资源合并为一个资源,通过android:top|bottom等控制子图片的位置。还可以为Seekbar设置背景,如

    <layer-list>
          <item android:id="@android:id/background" android:drawable="">
          <item android:id="@android:id/progress" android:drawable="">
    </layer-list>

<6>.ShapeDrawable,完整语法格式如下

    <shape>
        <!-- 定义几何图形四个角的弧度 -->
        <corners 
            android:radius="int" 
            android:topLeftRadius="int" 
            android:topRightRadius="int" 
            android:bottomLeftRadius="int" 
            android:bottomRightRadius="int"/>

        <!-- 定义使用颜色渐变填充 -->
        <gradient 
            android:angle="int" 
            android:centerX="int"
            android:centerY="int"
            android:centerColor="int"
            android:endColor="int"
            android:gradientRadius="int"
            android:startColor="int"
            android:type="linear | radial | sweep"
            android:usersLevel="true | false"/>

        <!-- 定义几何形状的内边距 -->
        <padding android:left|top|right|bottom="int"/>

        <!-- 定义几何图形的大小 -->
        <size 
            android:width="int"
            android:color="color"
            android:dashWidth="int"
            android:dashGap="int" />

        <!-- 定义使用单重颜色填充 -->
        <solid android:color="color" />

        <!-- 定义几何形状绘制边框 -->
        <stroke
            android:width="int"
            android:color="color"
            android:dashWidth="int"
            android:dashGap="int" />
    </shape>

<7>.ClipDrawable,位图上截取一个图片片段显示。此对象通过setLevel()开控制截取的范围,如果是clip.setLevel(0)则不截取,如果是clip.setLevel(10000)时为截取整张图片

    <clip
        android:drawable=""——截取的图片资源
        android:clipOrientation="horizontal | vertacal"——截取的方向
        android:gravity="top | bottom | left | right | center..." ——截取后的对其方式/>

<8>.AnimationDrawable,逐帧动画资源,可以为每一个动画标签设置<android:interpolator="linear_interpolator | accelerate_interpolator | decelerate_interpolator"/>匀速、加速、减速变换可以为每一个动画标签设置<android:fillAfter="true | false"/>动画执行完毕是否保留控件的变换效果


5.绘画、动画

<1>.Bitmap

createBitmap(Bitmap source, int x, int y, int width, int height);从源位图source的指定坐标点开始,挖取指定宽高的一个新的Bitmap对象
createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter);如上,不过会按照Matirx进行变换
createScaledBitmap(Bitmap src, int destWidth, int height);对源位图进行缩放,缩放成指定宽高
boolean isRecycled();返回给Bitmap对象是否已被回收
void recycle();强制一个Bitmap对象立即回收自己

<2>.Canvas,相当于画布

drawArc(RectF oval, float startAngle, float startAngle, float sweepAngle, boolean useCenter, Paint paint);——绘制弧
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint);——从指定点绘制从源位图中“挖去”的一块
drawBitmap(Bitmap bitmap, float left, float top, Paint paint);——在指定点绘制位图
drawCircle(float cx, float cy, float radius, Paint paint);——在指定点绘制一个圆
drawLine(float startX, float startY, float stopX, float stopY, Paint paint);——绘制多条直线
drawOval(RectF oval, Paint paint);——绘制椭圆
drawPath(Path path, Paint paint);——沿着指定Path绘制任意形状
drawPoint(float x, float y, Paint paint);——绘制一个点
drawPoints(float[] pts, float offset, int count, Paint paint)——绘制多个点
drawRect(float left, float top, float right, float bottom, Paint paint);——绘制矩形
drawRoundRect(RectF rect, float rx, float ry, Paint paint);——绘制圆角矩形
drawText(String text,int start, int end, Paint paint);——绘制字符串
drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)——沿着路径绘制字符串,画出各种不规则排列的字符
clipRect(float left, float top, float right, float bottom);——剪切一个矩形区域
clipRegion(Region region);——剪切指定区域
rotate(float degress, float px, float py);——对Canvas执行旋转变换
scale(float sx, float sy, float px, float py)——对Canvas执行缩放变换
skew(float sx, float sy);——对Canvas执行倾斜变换
translate(float dx, float dy);——移动Canvas,向右移动dx,向下移动dy

drawBimtapMesh(Bitmap bitmap, int meshWidht, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)——扭曲图片
1.bitmap:指定要扭曲的源位图
2.meshWidth:该参数控制在横向上吧该源位图划分成多少格
3.meshHeight:该参数控制在纵向上吧该源位图划分为多少格
4.verts:

<3>.Painter(画笔)

setRGB(int a, int g, int b);——设置颜色
setColor(int color);——设置颜色
setAlpha(int a);——设置透明度
setAntiAlias(boolean aa);——设置是否抗锯齿
setPathEffect(PathEffect effect);——设置绘制路径时的路径效果
setShader(Shader shader);——设置画笔的填充效果,能够设置渐变效果,通过Shader对象,如LinearGradient
setShadowLayer(float radius, float dx, float dy, int color);——设置阴影
setStrokeWidth(float width);——设置画笔的笔触宽度
setStrokeJoin(PaintJoin join);——设置画笔转弯处的连接风格
setStyle(Paint.Style style);——设置Paint的填充风格
setTextALign(Paint.Align align);——设置绘制文本是的文字对齐方式
setTextSize(float textSize);——设置绘制文本时的文字大小

<4>.Path类——路径类,可以自定义任意路径来拼凑出任意图形,通过Canvas来绘制

moveTo(float x, float y);设置起始点
lineTo(float x, float y);
quadTo(float previousX, float previousY, float x, float y)

<5>.PathEffect类——路径效果类,定义各种绘制路径的效果
ComposePathEffect、CornerPathEffect、DashPathEffect、DiscretePathEffect、PathDashPathEffect、SumPathEffect——分别对应6中效果,都需要初始化一些数值。什么虚线、破折线等等

<6>.Matrix,是一个矩形工具类。本身并不能对图形或组件进行变换,需要与其他API结合来控制图形

setTranslate(float dx, float dy);——控制Matrix进行平移
setSkew(float kx, float ky, float px, float py);——控制Matrix以px、py为轴心进行倾斜,kx、ky为X、Y方向上的倾斜距离
setSkew(float kx, float ky);——控制Matrix进行倾斜。kx、ky为X、Y方向上的倾斜距离
setRotate(float degress);——控制Matrix进行旋转,degress控制旋转的角度
setRotate(float degress, float px, float py);——设置以px、py为轴心进行旋转,degress控制旋转的角度
setScale(float sx, float sy);——设置Matrix进行缩放,sx、sy控制X、Y 方向上的缩放比例
setScale(float sy, float sy, float px, float py);——设置Matirx以px、py为轴心进行缩放,sx、sy控制X、Y 方向上的缩放比

$使用时可以靠drawBitmap(Bimtmap bitmap, Matrix matirx, Paint paint)来让绘制Bitmap按照你的Matirx进行变换了

<7>.Shader,填充图形。配合Painter一起使用

BitmapShader:使用位图平铺的渲染效果
LinearGradient:使用线性渐变来填充图形
RadialGradient:使用圆形渐变来填充图形
SweepGradient:使用角度渐变来填充图形
ComposeShader:使用组合渲染效果来填充图形

<8>.逐帧动画(Frame),设置每一帧图片,<animation-list>,这个可以作为AnimationDrawable

<9>.补间动画(Tween),同Flash

<10>.Interpolater(插值器:控制补间动画的变化速度,是一个接口,需要实现getInterpolation(float input)方法)

LinearInterpolator:匀速插值器
AccelerateInterpolator:动画开始地方变化较慢,然后开始加速
AccelerateDecelerateInterpolator:在动画开始和结束的地方变化均较慢,在中间时加速
CycleInterpolator:动画循环播放特定次数,变化速度按照正弦曲线改变
DecelerateInterpolator:在动画开始的地方变化较快,然后逐渐减速

定义补间动画的<set>中可以设置android:interpolator=""来支持Android默认的插值器,如
@android:anim/linear_interpolator
@android:anim/accelerate_interpolator
@android:anim/accelerate_decelerate_interpolator

<11>.自定义补间动画

Animation类

applyTransformation(float interpolatedTime, Transformation t);
interpolatedTime:表示动画时间进行比,不管动画持续时间如何,在动画播放时,该参数总是自动从0变到1
Transformation:代表了补间动画在不同时刻对图形或者组件的变形程度

自定义动画时就是在不同interpolatedTime时刻,来动态计算动画的变形程度即可。
Transformation 封装了Matrix对象,可对图形进行变形,通过getMetrix()获取。如果是进行三维空间上的变换,可以通过Camera类来控制,这是一个空间变换工具。

Camera类

getMatrix(Matirx matrix);——将Camera所做的变换应用到指定的matirx上
rotateX(float deg);——使目标组件沿X轴旋转
rotateY(float deg);——使目标组件沿Y轴旋转
rotateZ(float deg);——使目标组件沿Z轴旋转
translate(float x, float y, float z);——使目标组件在三维空间里进行位移变换
applyToCanvas(Canvas canvas);——在Camera所在的变换应用到Canvas上
save();——最好每次applyTransformation被调用是save()一次变换

<11>.补间动画与属性动画的区别

  • 补间动画只能定义两个关键帧在透明度、旋转、缩放、位移方面的变化。属性动画可以定义任何属性的变化
  • 补间动画只能对UI组件执行动画,属性动画可以让任何对象执行动画
  • 补间动画中View的位置是最初的位置,属性动画View的位置是动画执行完毕后View的当前位置

补充:动画这里说的极其不清楚,更多详尽可以去鸿洋大神博客去看,请看一下链接:

Android 属性动画(Property Animation) 完全解析 (上)

Android 属性动画(Property Animation) 完全解析 (下)

Android 属性动画 源码解析 深入了解其内部实现

<12>.SurfaceView

View 绘图的缺陷

  • 缺乏双缓冲机制
  • 当需要更新View上的图片时,程序必须重绘View上显示的整张图片
  • 新线程无法直接更新View组件,SurfaceView 可以开启一个线程来绘制更新自己

使用:SurfaceView一般与SurfaceHolder结合使用,SurfaceView 通过getHolder()方法即可获取其关联的 SurfaceHolder

SurfaceHolder类

Canvas lockCanvas();——锁定整个SurfaceView对象,获取SurfaceView上的Canvas
Canvas lockCanvas(Rect dirty);——锁定Rect中的区域,获取该SurfaceView上的Canvas,此方法更新Canvas只更新Rect圈出来的区域
unlockCanvasAndPost(canvas);——提交所绘制的新的Canvas

注意:当调用SrufaceHolder的unlockCanvasAndPost(canvas)方法之后,该方法之前所绘制的图形还处于缓冲区中,下一次lockCanvas()方法锁定的区域可能会“遮挡”

-- 双缓冲demo:应该是你的demo那个博客

-- 双缓冲理解: 分析SurfaceView源码

-- 双缓冲与单缓冲区别

-- 双缓冲与但缓冲动画绘制区别demo

SurfaceView.Callback接口

使用场景:一般我们自定义SurfaceView时会继承 SurfaceView 和实现 SurfaceHolder.Callback 接口,从而得到SurfaceView创建后三个生命周期方法

void surfaceChanged(SurfaceHolder holder, int format, int widht, int height);——当一个SurfaceView的格式或大小发生改变时回调该方法
void surfaceCreated(SufaceHolder holder);——当SurfaceView被创建时回调该方法
void surfaceDestroyed(SurfaceHolder holder);——当SurfaceView将要被销毁时回调该方法

6.数据存储(知识点超小,都不想记了....)

<1>.SharePreferences 的读取权限,初始化通过context.getShareedPreferences(String name, int mode),自己过去对这个权限有些错误认识

  • Context.MODE_PRIVATE:指定该SP数据只能被本应用读写
  • Context.MODE_WORLD_READABLE:指定该SP数据能被其他应用读,但不能写
  • Context.MODE_WORLD_WRITEABLE:指定该SP数据能被其他应用读写

Android 4.2以后不推荐使用后两种权限,因为其他应用读取SP数据可能会出现安全漏洞,官方推荐使用ContentProvider

<2>.SD卡添加文件写入数据需要权限支撑

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />SD 中创建于删除文件权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />向 SD 卡写入数据权限

<3>.splite3工具常用命令,支持运行各种DDL、DML

.databases:查看当前数据库
.tables:查看当前数据库里的数据表
.help:查看sqlite3支撑的命令

7.系统服务,Manager

<1>.TelephonyManager——电话管理器,提供了大量getXxx()方法获取电话网络、SIM 卡相关信息;还提供了一个listen(PhoneStateLintener listener, int events)来监听通话状态

<2>.SmsManager——短信管理器,提供了一系列sendXxxMessage()方法用于发送短信。

<3>.AudioManager——音频管理器,调整手机音量或者直接让其静音,提供各种调制各种声音的方法

<4>.Vibbrator——振动器,只有三个方法来控制手机的震动

<5>.AlarmManager——用途开发手机闹钟,本质是一个全局定时器,其可在指定时间指定周期启动其他组件

<6>.WallpaperManager——系统壁纸管理的服务,通过WallpaperManager.getInstance(Context)来初始化

<7>.AssetManager——资源管理器,通过Context.getAsset()来初始化。可获取文件的Descriptor指示器

<8>.CameraManager——照相管理器

<9>.MediaProjectionManager——屏幕捕捉管理器,Android 5.0 新增

<10>.SensorManager——系统的传感器管理服务,getSystemService(Comtext.SENSOR_SERVICE);进行初始化

getDefaultSensor(int type);——获取指定类型的传感器
rigisterLintener(SensorEvnetListener listener, Sensor sensor, int rate);——为指定传感器注册监听器,通常在Activity中的onResume()中调用。listener:监听器对象;sersor:穿管器对象;rate:获取传感器数据的频率,可取值如下所示:
            SensorManager.SNESOR_DELAY_FASTEST:最快,延迟最小。只有依赖传感器数据的应用使用此频率。耗电量大
            SensorManager.SENSOR_DELAY_GAME:适合游戏的频率。实时性要求的应用适合此频率
            SersorManager.SENSOR_DELAY_MORMAL:正常频率。不要求实时性可以使用此频率
            SensorManager.SNESOR_DELAY_UI:适合普通用户界面的频率,比较省电,延迟较大                                                                                                    
unRegisterListener(SersorEventListener listener);——解绑监听器

SersorEventListener

onSensorChanged(SensorEvent event);——当传感器的值发生改变时触发该方法
Sensor.TYPE_ORIENTATION            方向传感器 event.values();    values[1]:手机围绕Z轴旋转的角度,就是手机旋转的角度,取值范围为【0-360】
                                                            values[2]:手机围绕X轴旋转的角度,当手机屏幕朝上放在桌子上时【0】。手从屏幕上端开始翻起,翻转手机屏幕直到朝下【0-(-180)】
                                                                                                                     手从屏幕下端开始翻起,翻转手机屏幕直到朝下【0-180】
                                                            values[3]:手机围绕Y轴旋转的角度,当手机屏幕朝上放在桌子上时【0】,手从屏幕左侧开始翻起,翻转手机屏幕直到朝下【0-(-90)】
                                                                                                                     手从屏幕右端开始翻起,翻转手机屏幕直到朝下【0-90】
Sensor.TYPE_ACCELEROMETER        加速度传感器 event.values()    values[1]:X轴方向的加速度,values[2]:Y轴方向的加速度,values[3]:Z轴方向的加速度
Sersor.TYPE_GYROSCOPE            陀螺仪传感器 event.values()    values[1]:手机绕X轴旋转的角速度,手机绕Y轴旋转的角速度,手机绕Z轴旋转的角速度
Sersor.TYPE_MAGNETIC_FIELD        磁场传感器 event.values()        values[1]:X轴磁场强度,values[2]:Y轴磁场强度,values[3]:Z轴磁场强度;单位是[μT]
Sersor.TYPE_GARVITY             重力传感器 event.values()        values[1]:X轴重力,values[1]:Y轴重力,values[3]:Z轴重力
Sensor.TYPE_LINEAR_ACCELERATION    线性加速度传感器 event.values()    加速度传感器 = 重力传感器  +  线性加速度传感器
Sensor.TYPE_AMBIENT_TEMPERATURE    温度传感器 event.values()        values[1]:代表手机周围温度,单位是摄氏度
Sensor.TYPE_LIGHT                光传感器 event.values()        values[1]:代表手机周围光的强度,单位是勒克斯[lux]
Sensor.TYPE_PRESSURE            压力传感器 event.values()        values[1]:手机所处环境压力的大小

onAccuracyChanged(Sensor sensor, int accuracy);——当传感器精度发生改变时触发该方法

Android 5.0 新增心率传感器

//还缺少好多,以后补上


8.多媒体

<1>.MediaPlayer:播放音频

缺点:

  • 资源占用较高,延迟时间较长
  • 不支持多个音频同时播放

API说明

prepare();——    准备播放
prepareAsync();——异步的准备,不阻塞主线程
start();——开始播放
stop();——停止播放
pause();——暂停播放
static MediaPlayer create(Context context, Uri uri);——从指定Uri来转载音频文件
static MediaPlayer create(Context context, int resid);——从resid资源ID对应的资源文件中转载音频文件
setDataSource(String path);——指定转载path路径所代表的文件
setDataSource(FileDescriptor fd, long offset, long length);——指定装载fd所代表的文件中,从offset开始,长度为length的文件内容
setDataSource(FileDescriptor fd);——指定装载fd所代表的文件
setDataSource(Context context,Uri uri);——指定装载uri所代表的文件
setOnCompletionListener(Media.OnCompletionListener listener);——为MediaPlayer的播放完成事件绑定事件监听器
setOnErrorLister(MediaPlayer.OnErrorListener listener);——为MediaPlayer的播放错误事件绑定事件监听器
setOnPreparedListener(MediaPlayer.setOnPreparedListener listener);——当MediaPlayer调用prepare()方法时触发该监听器
setOnSeekCompleteListener(MediaPlayer.onSeekCompleteListenrer listener);——当MediaPalyer调用seek()方法触发该监听器

<2>.AudioEffect:音乐特效

AcousticEchoCanceler:取消回声控制器
AutomaticGainControl:自动增益控制器
NoiseSuppressor:噪音压制控制器
BassBoost:重低音控制器
Equalizer:均衡控制器
PresetReverb:预设音场控制器
Visualizer:示波器

<3>.SoundPool 用来播放音效,资源占用量低,反应延迟小。MediaPlayer不适合播放短促的音效

SoundPool.Bunider 来初始化构造这个对象
int load(Context context, int resId, int priority);——从resId所对应的资源加载声音,返回值就是音效对应的Id
int load(FileDescriptor fd, long offset, long length, long priority);——加载fd所对应的文件,从指定位置开始
int load(AssetFileDescriptor afd, int priority);——从afd所对应的文件中加载声音
int load(String path, int priority);——从path对应的文件中加载声音
int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate);——leftVolume,rightVolume指的是左右声道的音量;priority表示优先级;loop表示是否循环,0表示不循环,-1表示循环;rate表示播放比率,数值可从0.52,1位正常比率

<4>.VideoView

setVideoPath(String path);——加载path所代表的视频
setVideoURI(Uri uri);——加载Uri所对应的视频
setMediaController(MediaController controller);——设置VideoView的友好操作界面
start()、stop()、pause()

可使用 MediaPlayer + SurfaceView 来共同工作播放视频,不过较为复杂,推荐使用VideoView播放视频

<5>MediaRecorder可以录制音频和视频

<6>.Android 5.0 新增了Camera V2拍照,更多的功能,能够RAW照片输出,能够调整照片的对焦模式、曝光模式、快门等


9.网络

<1>.用户登录状态HttpClient会自动保存,就是SessionId不用做处理,剩下第三方框架有待试一试!

<2>.Android 自带的浏览器是使用开源的WebKit实现的

<3>.WebView,Android 5.0增强了WebView,基于Chromium M37

boolean zoomIn();——放大网页
boolean zoomOut();——缩小网页
loadData(String data, String mimeType, String encoding);——用于加载并显示Html代码,中文可能会显示乱码
loadData(String baseUrl, String data, String mimeType, String encoding, String historyUrl);——url传入null,mimeType可指定为"text/html",字符集随需求了,不显示乱码
getSettings();——获取WebSetting工具类

WebSettings 可以让JavaScript脚本调用Android对象

setJavaScriptEnabled(boolean enable);——启动WebView中JavaScript脚本调用Android对象的功能
addJavaScriptInterface(Object object, String name);——object:要调用的Android对象;name:在JavaScript脚本中引用的名称

<4>.Android应用于远程服务器进行交互,可通过WebService。涉及技术:(这个现在还不明白,改天网上搜搜吧)

  • Simple Object Access Protocal——SOAP,简单对象访问协议
  • Web Service Description Language——WSDL, WebService 描述语言
  • Universal Description,Description and Integration——UDDI,统一描述、发现和整合协议

Android基础版图.jpg

小礼物走一走,来简书关注我

编程笔记
Web note ad 1
后发表评论
Draper
2楼 · 2016.10.31 23:53

很棒,有些知识点以前只知道用,看了这个,思路会更清晰



被以下专题收入,发现更多相似内容
Android
我爱编程

猜你喜欢

转载自blog.csdn.net/weixin_42082222/article/details/80373055