Android复习

本文详细介绍了Android UI组件,包括常见的布局类型、控件及其特有的属性,并解释了Adapter的种类及自定义方法。同时,文章还涵盖了Android网络交互的基础知识,如HTTP协议的应用、数据接收与处理方式以及异步任务类AsyncTask的使用。
AndroidUI
   Android的UI组件被称为View
   布局有四种:
       LinearLayout,RelativeLayout,TableLayout,FrameLayout


   控件


特有属性:
   LinearLayout特有属性android:orientation
   (TableLayout其实也有)
   RelativeLayout特有属性
相对其他控件,取值是相对控件的id
layout_toRightOf
layout_below
layout_toLeftOf
layout_above


相对其他控件的边线对齐,取值是相对控件的id
layout_alignBaseline
layout_alignLeft
layout_alignTop
layout_alignRight
layout_alignBottom


相对父容器的某个位置,取值是true/false
layout_centerInParent
layout_centerHorizontal
layout_centerVertical
layout_alignParentLeft
layout_alignParentTop
layout_alignParentRight
layout_alignParentBottom
    TableLayout的特有属性:
android:stretchColumns//拉伸
android:shrinkColumns//收缩
    EditText等允许输入的控件都具备一个属性hint默认提示


   onDraw方法是所有View的绘制方法,这个方法只会在创建View的时候调用,如果要重新绘制,那么必须invalidate强制摧毁


   Adapter适配器
  1.有几种适配器
ArrayAdapter//ArrayAdapter只支持单数据显示(每个数据项只有一条数据)
SimpleAdapter//SimpleAdapter可以让每个数据项显示多种数据
SimpleCursorAdapter//SimpleCursorAdapter是用于将数据库查询结果和适配器绑定
自定义Adapter//BaseAdapter是一个抽象类,我们需要实现其中的方法来定义适配器
getCount方法决定数据项的总数
//getItem是当你通过适配器的getItem方法会调用的方法
//是一个主动方法,就是需要手动调用的方法
//getItemId和getItem是一样的,主动方法


//getView是被动方法,自动调用
//当要显示ListView中每项数据的时候会调用getView
//以便获取当前项到底显示什么
//View就是项,getView是核心方法


//小结:
 //在Android中如果查找控件:findViewById 
//在Android中如果查找资源,比如图片:getResources().getXxxx 
//在Android中如果查找布局:LayoutInflater.from(content).inflate


  2.自定义适配器要实现哪几个方法
自定义的Adapter继承至BaseAdapter
int getCount()
Object getItem(int)
long getItemId(int)
View getView(int,View,ViewGroup)
getView方法用于返回每个数据项的视图,是最关键的方法
getCount将决定数据项的总数




小结:其实AndroidUI这块基本上问题集中在以下几个方面:
1.控件  特有属性
2.onDraw方法   是谁的,view,什么时候调用,如何重新调用
3.Adapter  有几种,自定义的要实现哪几个方法,那几个方法分别有什么作用


Android网络:
1.网络数据交互的方法  http协议 HttpURLConnection
2.连接的方法有哪些
   HttpURLConnection
   HttpClient
   Socket
3.怎么接收和处理xml或json格式的数据


4.AsyncTask的使用//异步任务类
  a.有哪几个方法构成  三个方法,那个三个方法的特点和调用过程
onPostExecute    doInBackground     
  b.AsyncTask的优点   解决了UI线程和非UI线程之间调度的问题


* onPreExecute(), 该方法将在执行实际的后台操作前被UI 线程调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条,或者一些控件的实例化,这个方法可以不用实现。
       
* doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台处理工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
      
* onProgressUpdate(Progress...),在publishProgress方法被调用后,UI 线程将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
      
* onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI 线程调用,后台的计算结果将通过该方法传递到UI 线程,并且在界面上展示给用户.
      
* onCancelled(),在用户取消线程操作的时候调用。在主线程中调用onCancelled()的时候调用。
为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
      1) Task的实例必须在UI 线程中创建
      2) execute方法必须在UI 线程中调用
      3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法,需要在UI线程中实例化这个task来调用。
      4) 该task只能被执行一次,否则多次调用时将会出现异常
      doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数。




Android组件
1.有几个组件   四个
2.哪四个组件  Activity活动 Service服务 Broadcast广播 ContentProvider内容提供者


3.Intent是不是组件,不是,那Intent是什么 
Intent是组件之间的粘合剂,服务的启动,广播的发送,Activity的切换都需要通过Intent
另外Intent还可以在组件之间充当数据传递的媒介
4.那么IntentFilter和Intent有什么关系
Intent用于启动组件或是传递数据
而IntentFilter是用于命别名,以便外部程序访问,比如为Activity命名,又比如为广播起名
另外IntentFilter还可以将多个不同的Activity归类为一组,在进行某一动作的时候由用户在这一组中自行选择启动的Activity
5.Activity的生命周期
6.Activity的横竖屏切换时的生命周期
Activity生命周期分为:
完整生命周期(Activity创建到销毁)
onCreate----onDestroy
可视生命周期(Activity可见到不可见)
onStart----onStop
前台生命周期(Activity可操作到不可操作)
onResume---onPause


正常情况下启动一个Activity会经历以下方法:
onCreate-->onStart-->onResume
当按back结束的时候:
onPause-->onStop-->onDestroy


如果是其他Activity覆盖了当前的Activity
比如来了电话,那么电话界面会强制覆盖当前的Activity
或者当按下Home键的时候
那么:
onPause-->onStop
如果在一段时间之内重新返回到这个Activity
那么:
onRestart-->onStart-->onResume


onDestroy是不靠谱的,所以千万不要将onDestroy作为程序的边界
那么程序边界设置为onStop可以么?


在传统程序中,比如桌面程序(Swing),web程序(JSP/Servlet)中,对话框是同步的
就是对话框出现后,会导致后续代码停止运行,等待对话框关闭后才继续执行
而Android中的对话框是异步的
简单的说:Android的对话框show出来后,后面的代码继续执行


如果在Android中要实现同步对话框,请选择Activity模拟


onPause是当前Activity失去用户操作时最后一个肯定会被调用的方法,而后面的onStop以及onDestroy则不一定会触发
所以onPause是实际意义上程序的边界


而启动Activity最后的一个步骤是调用onResume




Android的横竖屏切换比我们想像中要复杂的多
它的切换是依靠摧毁,重新创建来实现
所以当切换横竖屏的时候会经历以下方法:
onPause-->onStop-->onDestroy-->onCreate-->onStart-->onResume
那么在这个过程中,程序的运行数据和状态会因为onDestroy的调用丢失,也会因为onCreate的调用而重置
所以Activity还提供了2个专门解决这个问题的方法:
onSaveInstanceState
onRestoreInstanceState
调用的流程是:当切换横竖屏的时候
onPause-->onSaveInstanceState-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume


7.Service的生命周期(启动和绑定服务)
8.Broadcast(如何拦截短信,描述流程)
9.ContentProvider






Android存储
1.什么时候用什么样的存储方式
  a.文件                 外部提供的数据或临时数据
  b.sqlite               数据关系复杂或数据量大
  c.SharedPreferences    数据量少
2.sqlite的操作
3.assets和raw目录存放的文件有什么差异
### Android 复习资料:字节操作 对于Android开发者来说,理解字节操作是非常重要的,尤其是在处理文件读写、网络通信等场景时。下面是一些关键概念和技术要点: #### 文件缓存中的字节操作 在Android开发中,经常涉及到将资源转换并存储到磁盘缓存的操作。例如,在图片加载库Glide中,`writeTransformedToCache`方法用于将已变换的资源保存至磁盘缓存[^2]。 ```java private void writeTransformedToCache(Resource transformed) { if (transformed == null || !diskCacheStrategy.cacheResult()) { return; } long startTime = LogTime.getLogTime(); SourceWriter<Resource> writer = new SourceWriter<>(loadProvider.getEncoder(), transformed); diskCacheProvider.getDiskCache().put(resultKey, writer); } ``` 这段代码展示了如何安全有效地将经过某些方式修改后的图像数据(或其他类型的二进制数据)持久化到设备上的本地存储空间内。这不仅提高了应用性能,还减少了不必要的网络请求次数。 #### 物理内存管理与字节访问 另一个重要领域是在底层硬件交互过程中涉及的物理地址映射和直接内存访问(DMA),特别是在JNI层面上工作时更为常见。这里给出了一段C++风格伪代码来展示获取特定索引处的物理内存片段的过程[^3]: ```cpp const ZPhysicalMemorySegment& segment = pmem.segment(i); ``` 此语句表示从给定的对象集合中选取第i个元素作为当前上下文中使用的物理内存区段对象。这类低级别的API通常只会在非常特殊的场合下被调用,比如实现自定义驱动程序或是优化多媒体编解码器的表现。 --- ### 面试准备:针对字节跳动公司 为了更好地为即将到来的技术面试做准备,特别是像字节跳动这样的大型互联网企业,建议关注以下几个方面[^1]: - **技术栈掌握**:熟悉Java/Kotlin语言特性及其生态系统内的常用框架; - **算法设计能力**:能够快速解决常见的编码挑战题,并能清晰表达解决问题思路; - **项目经验积累**:准备好分享个人参与过的实际案例,强调团队协作和个人贡献部分; - **软技能提升**:培养良好的沟通技巧和服务意识,展现出积极主动的态度面对困难问题。 通过以上两个方向的学习和实践,可以有效提高应聘成功率,同时也为自己未来的职业发展打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值