首页 > 其他分享 >寒假安卓学习过程及总结

寒假安卓学习过程及总结

时间:2024-02-28 21:34:20浏览次数:26  
标签:总结 存储 调用 安卓 寒假 Intent Activity intent View

四大组件

Activity可视化界面Service无界面后台服务,ContentProvider数据共享内容提供者,BroadcastReceiver消息传递广播

Activity切换横竖屏时会重新走生命周期,从onstop到onCreate,如果在清单文件配置android:configChanges="orientation|keyboardHidden|screenSize"就可以避免该情况onNewIntent调用时机,Intent是用来进行组件间通信的,那onNewIntent就是用来处理新的数据通信,在每次复用得时候调用,即走onRestart()生命周期得时候调用。Intent传输数据的大小是有限制的,因为Intent 中的 Bundle 是使用 Binder 机制进行数据传送的, 数据会写到内核空间,即Binder 缓冲区域,缓冲区大小一般是1-2M。Activity启动模式,standard默认模式(每次startActivity会创建新得Activity);SingleTop栈顶复用模式;SingleTask栈种单例模式;SingleInstance全局系统单例模式Service和Activity进行通信,通过bindService()可以实现Activity调用Service中的方法;通过广播实现Service向Activity发送消息Activity 的启动过程,调用 startActivity() 后经过重重方法会转移到 ActivityManagerService 的 startActivity(),并通过一个 IPC 回到 ActivityThread 的内部类 ApplicationThread 中,并调用其scheduleLaunchActivity()将启动Activity的消息发送并交由Handler H处理。Handler H对消息的处理会调用handleLaunchActivity()->performLaunchActivity()得以完成Activity对象的创建和启动onSaveInstanceState(),onRestoreInstanceState的调用时机,当系统内存不足等原因回收Activity,Activity销毁前会调用onSaveInstanceState()用来保存数据;当再次启动被回收的Activity会调用onRestoreInstanceState();如切换横竖屏生命周期如下onPause() –> onSaveInstanceState() –> onStop() –> onDestroy() –> onCreate() –> onStart() –> onRestoreInstanceState() –> onResume()

 

Activity、Window、DecorView与ViewRoot之间的关系

Acitiviy不是真正的展示窗口,是作为一个载体与入口的存在。
PhoneWidow是真正的展示窗口,一个Activity上面有一个PhoneWindow,PhoneWinow上有一个DecoView
DecoView上面的ContentView(R.id.content)才是我们真是写的布局文件所展示的位置,PhoneWindow通过WindowManager管理DecoView
ViewRoot 是 DecorView 的管理者,它负责 View 树的测量、布局、绘制,以及事件分发入口。
WMS是PhoneWindow的管理者,是一个系统服务,管理window的显示隐藏以及要显示的位置

安卓存储数据方式(重要)

文件存储、SQLite数据库、SharedPreferences、ContentProvider、网络

1.SharedPreferences

优点: 轻量级,以键值对的方式进行存储,使用方便,易于理解
采用的是 XML 文件形式存储在本地,程序卸载后会也会一并被清除,不会残留信息
缺点: 列表式的数据不支持,储存相对单一,无法条件查询,不适合大量的数据存储。 在跨进程通讯中不去使用 SharedPreferences 键值对不宜过多

2.文件存储

**优点:**可以在设备本身的存储设备或者外接的存储设备中创建用于保存数据的文件。

**缺点:**同样在默认的状态下,文件是不能在不同的程序间共享。

3.ContentProvider

Android 系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。每个 ContentProvider 都会对外提供一个公共的 URI(包装成 Uri 对象),如果应用程序有数据需要共享时,就需要使用 ContentProvider 为这些数据定义一个 URI,然后其他的应用程序就通过 Content Provider 传入这个 URI 来对数据进行操作。

4.SQLite 数据库

优点: 轻量级,独立性,隔离性,安全性
缺点: SQLite 在并发的读写方面性能不是很好,数据库有时候可能会被某个读写操作独占,可能会导致其他的读写操作被阻塞或者出错。

5.网络存储

优点: 几乎可以不用担心内存问题,本地处理麻烦的可以交由服务器处理
缺点: 完全依赖于网络 ,网络延迟和资费成本都会上升

 

 

意图启动activity的方式,分别怎么用,activity之间传数据怎么通过意图传数据

(1)激活另一个手机的方式

 

public void onClick(View v){
//激活系统的另一个程序
Intent intent = new Intend();
intent.setAction("andriod..intent.action.VIEW");
intent.addCategory("andriod.intent.categeory.DEFAULT");
intent.addCategory("andriod.intent.category.BROWSABLE");
intent.setData(Uri.parse("http://www.hncu.edu.cn/"));
startActivity(intent);
监听器

<activity
android:name="com.cy.app.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
(2)意图启动activity的方式

public void click01(View view){//显式
Intent intent = new Intent(this,MainActivity02.class);
startActivity(intent);
}

public void click02(View view){//隐式
Intent intent = new Intent();
intent.setAction("com.cy.app.yinshi");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
}
隐式意图需要过滤器

<activity
android:name="com.cy.app.YinShiActivity"
android:label="@string/title_activity_yin_shi" >
<intent-filter>
<action android:name="com.cy.app.yinshi"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
(3)如何传递数据

直接传递:intent.putExtra(key, value)

第一个Activity,发送数据

//创建意图对象
Intent intent = new Intent(this,TwoActivity.class);
//设置传递键值对
intent.putExtra("data",str);
//激活意图
startActivity(intent);
第二个Activity接收数据

// 获取意图对象
Intent intent = getIntent();
//获取传递的值
String str = intent.getStringExtra("data");
//设置值
tv.setText(str);

 

 

 

按钮绑定事件(重点)

方式一
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="绑定方式1"
android:id="@+id/btn1"
/>

成员变量

private Button bnt1;
构造方法:

bnt1 = findViewById(R.id.btn1);
bnt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"绑定方式1",Toast.LENGTH_SHORT).show();
}
});
方式二
<Button
android:layout_below="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="绑定方式2"
android:onClick="click02"
android:id="@+id/btn2"
/>
成员方法:

public void click02(View view){
Toast.makeText(this, "绑定方式2", Toast.LENGTH_SHORT).show();
}

 

标签:总结,存储,调用,安卓,寒假,Intent,Activity,intent,View
From: https://www.cnblogs.com/litianyu1969/p/18041927

相关文章

  • 《系统科学方法概论》第四章总结
    一,控制论史控制论:关于在动物和机器中控制和通讯的科学二,控制和控制系统控制:在一定环境中,一个系统通过一定方式驾驭或支配另一个系统做和目的运动的行为及过程。控制系统组成:失控系统和受控系统,控制手段,控制目的,控制环境。控制控制的实质是施控系统在受控系统的多种可能运动......
  • 寒假第二十三天
    Android是一个开源的,基于Linux的移动设备操作系统,如智能手机和平板电脑。Android是由谷歌及其他公司带领的开放手机联盟开发的。 Android提供了一个统一的应用程序开发方法,这意味着开发人员只需要为Android进行开发,这样他们的应用程序就能够运行在不同搭载Android的移......
  • 2024牛客寒假算法基础集训营6 题解 ( A,B,C,D,E,I)
    2024牛客寒假算法基础集训营6题解(A,B,C,D,E,I)A 宇宙的终结题意找到\([l,r]\)区间中有多少数恰好等于三个不同素数的乘积思路数据范围很小,可以考虑暴力,遍历\([l,r]\)区间内每个数,拿每个小于当前数的素数一直往下除,判断是否存在能被恰好3个素数整除的情况代码/********......
  • 【总结】对大量函数进行trace调用流程+国际AIS3题
    现在混淆的主要目的之一就有让逆向分析人员不清楚函数的调用流程,给你一堆函数,加了高强度的OLLVM,更不能看了。那么Trace跟踪技术就显得很重要的,如果清楚了函数调用流程,那么逐个分析,距离成功不就很快了。万事开头难,逆向程序难在不知道从哪开始。前几天做了一道AIS3的题目,内含50个......
  • 一月二十三日 安卓程序开发二
    首先做了一个初始化的登录界面  <TextViewandroid:id="@+id/et1"android:layout_marginTop="150dp"android:layout_width="match_parent"android:layout_height="75dp"android:gravity=&quo......
  • 一月二十四日 安卓程序开发三
    实现点击按钮跳转页面功能,当点击登录时会根据输入的用户名密码是否跳转页面privateButtonmyButtonlogin;privateEditTextmetUser;privateEditTextmetPassword;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.on......
  • 一月二十三日 安卓程序开发一
    首先需要下载Androidstudio 点击Downloadoptions进入下载选项也可以选择自己需要的系统版本进行下载,Windows(64-bit),很明显,看后缀名,前面的是安装程序,后面的是压缩包。我们直接下载安装程序就行。等待下载就可以了二、安装AndroidStudio步骤1、 双击进行安装2、进入安......
  • Docker镜像拉取总结
    flanneldockerpullquay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64dockertagquay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64quay.io/coreos/flannel:v0.11.0-amd64dockerrmiquay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64tillerdockerpull......
  • 工作总结
    2.28工作总结,我完成了前两部分一、 数据结构分析:(1)京津冀三省的2015年度的科技成果数据原始表,为Access数据库,; (2)要求将三省的科技成果数据汇总到同一表中(要求结果表为MySql数据表);(3)三个原始数据表结构不一致,要求结果表中包括所有的字段,表达意思相同或相似的字段要进行合并,不......
  • 今日总结
    公司业务需要把Excel表中的十多万条数据导入到数据库表中,这样比执行sql语句插入数据快多了比如:想把如下图的(sanyi.xlsx)Excel表格导入MySQL表(tb_sanyi_client)中1、将excel表格另存为csv文件,csv默认为逗号分隔2、使用notepad++工具打开保存好的CSV文件,转换成utf-8格式3、使用......