安卓基础 Android基本组件

Android的基本世界观——系统简介,组件逻辑及其他 作为一个有半年余Android Developing折腾经验的Android Developer(为什么不说“开发经验”呢?因为我仔细想了想,我还没有独立地做出一个完善美观且有使用价值的应用。),要系统地学习安卓平台的基本开发技能,那么第一步,了解并熟识Android的基本世界观,应该就是十分必要的了。以前这方面的知识体系不成系统,比较破碎零散,故借此文稍作整理。 阅读详情
Android的基本组件

一.Activity
Activity 是最基本的模块,一般称之为“活动”,在应用程序中一般一个Activity就是一个单独的屏幕。每一个活动都被实现为一个独立的类,并且从活动基类中继 承而来,活动类将会显示由视图控件组成的用户接口,并对事件作出响应。Activity利用View来实现应用中的GUI(用户直接通过GUI和应用程序 做交互)。Activity窗口内的可见内容通过基类View提供。使用Activity.setContentView()方法设置当前 Activity中的View对象。
每个View对象控制着窗口内的一个矩形空间;
View是一种层次化结构,Parent View中的布局属性会被子View继承;
位于View层次关系最底层的子View对象所代表的矩形空间就是跟用户进行交互的地方

Activity状态回调:

onCreate
onStart
onRestart
onResume
onPause
onStop

onDestroy 


二.Intent
Android 中用Intent这个特殊类实现Activity与Activity之间的切换,Intent在不同的组件之间传递消息,将一个组件的请求意图传给另一个 组件。因此,Intent是包含具体请求信息的对象。针对不同的组件,Intent所包含的消息内容有所不同,且不同组件的激活方式也不同, 且不同类型组件有传递Intent的不同方式。Intent是一种运行时绑定(runtime binding)机制,它能够在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表到某种请求或者意 愿,Android会根据意愿的内容选择适当的组件来处理请求。

其他4种基本组件中,除了Content Provider是通过Content Resolver激活外,其他3种组件Activity、Service和Broadcast Receiver都是由Intent异步消息激活的。

Intent在不同的组件之间传递消息,将一个组件的请求意图传给另一个组件。因此,Intent是包含具体请求信息的对象。

针对不同的组件,Intent所包含的消息内容有所不同,且不同组件的激活方式也不同, 且不同类型组件有传递Intent的不同方式。

Intent是一种运行时绑定(runtime binding)机制,它能够在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表到某种请求或者意愿,Android会根据意愿的内容选择适当的组件来处理请求。

 激活一个新的Activity,或者让一个现有的Activity执行一个新的操作,可以通过调用如下两种方法(这两汇总方法需要传入的Intent参数称为Activity Action Intent):

1.Context.startActivity()

2.Activity.startActivityForResult()

启动一个新的服务,或者向一个已有的服务传递新的指令,可以调用如下两种方法:

1.Context.startService()

2.Context.bindService()

发送广播Intent(所有已注册的拥有与之相匹配IntenFilter的BroadcastReceiv就会被激活),可以调用如下三种方法:

1.Context.sendBroadcast()

2.Context.sendOrderBroadcast()

3.Context.sendStickBroadcast()

Intent一旦发出,Android都会准确找到相匹配的一个或多个Activity、Service或BroadcastReceiver作响 应。所以,不同类型的Intent消息不会出现重叠,BroadcastIntent消息只会发送给BroadcastReceiver,而绝不可能发送 给Activity或Server。有startActivity()传递的消息也只可能发送给Activity,由startService()传递的 Intent只可能发送给Service。

 

Intent对象抽象地描述了执行操作,Intent的主要组成部分;

1.目标组件名称。[可选项]

a) 组件名称是一个ComponentName对象,是目标组件类名和目标组件所在应用程序包的组合

b) 组件中的包名不一定要和manifes文件中包名完全匹配

c) 如果Intent消息中指明了目标组件的名称,这就是一个显示消息,Intent会传递给指明的组件。

d) 如果目标组件名称并没有指定,Android则通过Intent内的其他信息和已注册的IntentFilter的比较来选择合适的目标组件

2. Action [隐式比较]

a)描述Intent所触发动作的名字字符串。

b)理论上Action可以为任何字符串,而与Android系统应用有关的Action字符串以静态字符串常量的形式定义在了Intent类中。

3.Data [隐式比较]

a)描述Intent要操作的的数据的URI和数据类型。

b)正确设置Intent的数据对于Android寻找系统中匹配Intent请求的组件很重要。

4.Category [隐式比较]

a)是对被请求组件的额外描述信息。

b)Android也在Intent类中定义了一组静态字符串常量表示Intent不同的类别。

5.Extra

a)当我们使用Intent连接不同组件时,有时需要在Intent中附加额外的信息,以便将数据传递给目标Activity。

b)Extra用键值对结构保存在Intent对象当中,Intent对象通过调用方法putExtras() 和 getExtras()来存储和获取Extra

c)Extra是以Bundle对象的形式来保存的,Bundle对象提供了一系列put和get方法来设置、提取相应键值信息。

d)在Intent类中同样为Android系统应用的一些Extra的键值定义了静态字符串常量。

6.Flag

 

决定Intent目标组件的因素:

在显式Intent消息中,决定目标组件的唯一要素就是组件名称(不用再定义其他Intent内容)

而隐式Intent消息中,由于没有目标组件名称,所以必须由Android系统帮助应用程序寻找与Intent请求意图最匹配的组件。

 隐式Intent消息中目标组件具体选择方法是:android将Intent的请求内容和一个叫做IntentFilter的过滤器比 较,IntentFilter中包含系统中所有可能的待选组件。如果IntentFilter中某一个组件匹配隐式Intent请求内容,那么 Android就选择该组件作为该隐式Intent的目标组件。

 

IntenFilter

应用程序的组件为了告诉Android自己能响应、处理哪些隐式Intent请求,可以声明一个甚至多个IntentFilter。

每个IntentFilter描述该组件所能响应Intent请求的能力 —— 组件希望接收什么类型的请求行为,什么类型的请求数据。

隐式Intent和IntentFilter进行比较时的三要素:Action、Data、Category。

一个隐式Intent请求要能够传递给目标组件,必需通过以上三个方面的检查。如果任何一方面不匹配,Android都不会将该隐式Intent传递给目标组件。

       <intent-filter>

              <action android:name=””/>

              <category android:name=””/>

              <data android:type=”” android:scheme=”” android:authority=”” android:path=””/>

       </intent-filter>

1. 动作测试

a)一条 <intent-filter> 中至少应该包含一个<action>, 否则任何Intent请求都不能和该<intent-filter> 匹配。

b)如果IntentFilter 中没有包含任何Actino类型,那么无论什么Intent请求都无法和这条IntentFilter匹配。

c)如果Intent请求中没有设定Action类型,那么只要IntentFilter中包含有Action类型,这个Intent请求将顺利通过IntentFilter的测试。

2. 类别测试

a)只有当Intent请求中所有的Category与组件中的某一个IntentFilter的category完全匹配,才会让该Intent请求通过测试,IntentFilter中的多余category声明并不会导致匹配失败。

b)一个没有指定任何类别的IntentFilter仅仅只会匹配没有设置类别的Intent请求。

3. 数据测试

a)<data>元素指定了希望接受的Intent请求的数据URI和数据类型:URI被分成三部分类进行匹配,scheme、authority和 path.

b)使用 setData设定的Intent请求的URI数据类型和scheme,必须与IntentFilter中指定的一致


三.Service
运行于应用程序进程的主线程中,因此Service不会阻塞其他组件和用户界面。

       Service是不能自己启动的,必须通过Context对象(如一个Activity)调用startService或bindService方法来启动(用这两种方法启动的Service的生命周期不同)。

1.调用startService方法

a)若Service没有启动,则首先会调用该Service的onCreate方法,然后再调用onStart方法。

b)若Service已经启动,则会直接调用onStart方法

c)该方法启动的Service,可以通过Context对象调用stopService来关闭,也可以通过Service自身调用stopSelf()或stopSelfResult()来关闭,关闭之前调用onDestory方法。

2.调用bindService方法,使当前Context对象通过一个ServiceConnection的对象绑定到所指定的Service

a)若Service没有启动,则首先会调用该Service的onCreate方法初始化启动,然后调用Service的onBind方法初始化绑定。

b)如果绑定Service的Context对象被销毁时,被绑定的Service也会调用onUnbind 和 onDestroy方法停止运行

c)注意: BroadcastReceiver是不能绑定服务的。

d)一个绑定Service的Context对象还可以通过unbindService()来取消对服务的绑定。

e)取消时,Service会调用unbind方法,若Service是通过bindService来启动的,还会调用onDestroy方法来停止服务。

       Service状态回调:

l         onCreate

l         onStart

l         onBind

l         onRebind

l         onUnbind

l         onDestroy


四.Broadcast Receiver
Android中的广播要么来自于系统,要么来自普通应用程序。

很 多事件都可能导致系统广播,如手机所在时区发生变化,电池电量低,用户改变系统语言设置等。来自普通应用程序,如一个应用程序通知其他应用程序某些数据已 经下载完毕。为了响应不同的事件通知,应用程序可以注册不同的Broadcast Receiver。所有的Broadcast Receiver都继承自基类BroadcastReceiver。
BroadcastReceiver自身并不实现图形用户界面,但是当它收 到某个通知后,BroadcastReceiver可以启动Activity作为响应,或者通过NotificationMananger提醒用户。 BroadcastReceiver是对发送出来的Broadcast进行过滤接收并响应的一类组件。
发送Broadcast信息
1.把要发送的信息和用于过滤得信息(如Action、Category)装入一个Intent对象
2.调用Context.sendBroadcast()、sendOrderBroadcast()、sendStickyBroadcast()方法,广播该Intent对象
3.使用sendBroadcast() 或sendStickyBroadcast()方法发出去的Intent,所有满足条件的BroadcastReceiver都会随机地执行其onReceive()方法;
4.而sendOrderBroadcast()发出去的Intent,会根据BroadcastReceiver注册时IntentFilter设置的优先级的顺序来执行,相同优先级的BroadcastReceiver则是随机执行
5.sendStickyBroadcast()方法主要的不同是,Intent在发送后一直存在,并且在以后调用registerReceiver()注册相匹配的Intent时会把这个Intent直接返回。
6. 若在使用sendBroadcast()方法时指定了接收的权限,这只有在AndroidManifest.xml中用<uses- permission>标签声明了拥有此权限的BroadcastReceiver才会有可能接收到发送来Broadcast。
7.若在 注册BroadcastReciever时,指定了可接收的Broadcast的权限,则只有在包内的AndroidManifest.xml中 用<uses-permission>标签声明了,拥有此权限的Context对象所发送的Broadcast才有可能被这个 BroadcastReceiver所接收。
接收Broadcast消息
1.继承BroadcastReceiver 类,并实现onReceive方法
2. 注册Broadcast Receiver(有2种方法:一种方法是,静态地在AndroidManifest.xml中用<receiver>标签声明,并在标签内 用<intent-filter>标签设置过滤器; 另一种方法,动态地在代码中先定义并设置好一个IntentFilter对象,然后再需要注册的地方调用 Context.registerReceiver()方法) (取消注册时,调用Context.unregisterReceiver()方法) 


五.Content Provider

为解决应用程序间数据通信、共享的问题(基类ContentProvider)
在Android中,每个应用程序都是用自己的用户ID并在自己的进程中运行。这样的好处是,可以有效地保护系统及应用程序,避免被其他不正常德应用程序所影响,每个进程都拥有独立的进程地址空间和虚拟空间。
Content Provider可以将应用程序特定的数据提供给另一个应用程序使用。其数据存储方式可以是Android文件系统、SQLite数据库或者其他合理的方式。
当数据需要在应用程序间共享时,我们就可以利用ContentProvider为数据定义一个URI。之后,其他应用程序对数据进行查询或者修改时,只需要从当前上下文对象获得一个ContentResolver, 然后传入响应的URI就可以了。
Content Provider 继承自基类ContentProvider,并且实现了一组标准接口。通过这组接口,其他应用程序能对数据进行读写和存储。然而,需要使用数据的应用程序 并不是直接调用这组方法,而是通过调用ContentResolver对象的方法来完成。ContentResolver对象可以与任意 ContentProvider通信。
要为当前应用程序的私有数据定义URI,就需要专门定义一个继承自ContentProvider的类,然后根据不同的操作调用的方法去实现这些方法的功能。
ContentResolver 类为应用程序提供了接入Content机制的方法。要构造一个ContentResolver对象可以为构造方法 ContentResolver(Context context)传入一个Context对象,也可以直接通过Context对象调用getContentResolver()方法获得 —— 有的ContentResolver对象后,就可以通过调用其query()、insert()、update()等方法来对数据进行操作了。

 

转载自http://blog.youkuaiyun.com/CrazyJeff_Liu/archive/2010/04/30/5545806.aspx








Android四大组件详解 阅读详情

相关推荐

单细胞分析进阶:sctransform标准化在Seurat中的实战解析

本文深入解析了sctransform标准化方法在Seurat单细胞分析中的实战应用。通过对比传统对数标准化,sctransform能更有效地建模并剔除技术噪音,提升数据质量。文章提供了从环境配置、数据准备、核心参数解析到完整流程整合的详细指南,并针对常见问题给出解决方案,帮助研究者获得更清晰的细胞分群和更可靠的差异表达结果。

weixin_29248313的博客 152

Android中四大组件

4大基本组件都需要注册才能使用,每个Activity、service、Content Provider都需要在AndroidManifest文件中进行配置。AndroidManifest文件中未进行声明的activity、服务以及内容提供者将不为系统所见,从而也就不可用。而broadcast receiver广播接收者的注册分静态注册(在AndroidManifest文件中进行配置)和通过代码动态创建并以调用Context.registerReceiver()的方式注册至系统。

zxz_zxz_zxz的博客 2037

CoMP 协同多点传输技术

CoMP CoMP是什么 解决什么问题 有什么缺点 CoMP(Coordinated Multiple Points)协同多点传输,通信术语,LTE-A的重要技术之一。 CoMP传输是指地理位置上分离的多个传输点,协同参与为一个终端的数据(PDSCH)传输或者联合接收一个终端发送的数据(PUSCH),参与协作的多个传输点通常指不同小区的基站。CoMP技术将边缘用户置于几个基站的同频率上,几...

ilean_J的博客 2万+

Android四大组件

Android的一些基本所知(可做面试复习用)2019前言一、四大组件1.ActivityActivity的作用Activity的生命周期Activity的启动模式Activity可能会遇到的问题你后台的Activity被系统 回收怎么办:onSaveInstanceState2.ServiceService的作用Service的两种状态Service的两种状态ServiceIntentServi...

未来源起的博客 5735

基于PI双闭环解耦控制的三相SVPWM电压型逆变器(3)--调制方法

阐述SPWM和SVPWM的原理以及实现方法

weixin_58670090的博客 6260

别再瞎调了!手把手教你搞定STM32步进电机PID速度环(附完整代码与比例系数详解)

本文详细解析了STM32步进电机PID速度环的完整实现过程,从算法输出到脉冲频率的转换链路,重点讲解了比例系数的确定方法及系统标定实验。通过完整的代码示例和调试技巧,帮助工程师解决实际应用中的常见问题,提升步进电机控制精度与稳定性。

weixin_28729331的博客 214

【Android】基础回顾--四大组件

继承至BroadcastReceiver基类重写onReceiver()方法广播接收器收到相应广播后,会自动回调onReceiver()方法;一般情况下,onReceiver方法会涉及与其他组件之间的交互,如发送Notification、启动service等等;默认情况下,广播接收器运行在UI线程,因此onReceiver方法不能执行耗时操作,否则可能ANR。

2303_79296612的博客 3954

ESP32-C3微型9轴感知模块的硬件工程实践

在嵌入式系统小型化趋势下,低功耗微控制器与多传感器融合成为智能终端的基础技术路径。其核心原理在于芯片能效比、射频合规性与电源噪声抑制的协同优化,技术价值体现在降低认证门槛、提升EMC鲁棒性及保障MEMS传感器精度。典型应用场景包括可穿戴设备、微型无人机姿态控制和工业边缘传感节点。本文围绕ESP32-C3平台展开,深入解析QFN封装选型逻辑、同步降压电源设计、LSM9DS1九轴校准策略等关键环节,覆盖FCC/CE认证规避、USB-C接口EMC防护等高频工程痛点。

weixin_42607969的博客 369

[Android]四大组件简介

在 Android 开发中,“四大组件”(Four Major Components)是指构成 Android 应用程序的四种核心组件,它们通过各自的方式与系统交互,实现应用的多样功能。这些组件是:Activity、Service、Broadcast Receiver 和 Content Provider。每个组件都扮演着不同的角色,并且通过各自的生命周期、方法和目的与 Android 操作系统交互。

Gamin 5927

探索 .NET 多版本兼容的精美 WinForms UI 控件库:ReaLTaiizor

你可以根据需要修改主题的颜色方案。// 示例:修改主题颜色设置主色和次色。应用到中。通过继承和重写控件的方法,可以实现自定义样式。// 示例:自定义 MetroButton 样式// 自定义绘制逻辑创建类继承自。重写OnPaint方法,添加自定义绘制逻辑。

墨夶的博客 1509

基于Vision Transformer的鸟类图像分类(200个类别)完整代码+数据

基于Vision Transformer的鸟类图像分类(200个类别)完整代码+数据

1727

安卓开发学习-Android Studio-03-前端入门

文章目录前言一、简介二、组件基本属性三、组件的添加 前言 从这篇文章开始,进入基本的前端学习。 一、简介 安卓前端开发使用的是xml语言 有几种书写方式: 这里以textview标签为例 1.<TextView 属性 /> 2.<TextView 属性 >内容< /TextView> 二、组件基本属性 android:text = “Hello World!” //显示的文本内容 android:textColor = “#ffffff” //文本颜色,采用RG

qq_44091183的博客 3292

fast-lio系列改进版本

2.回环检测的优化结果,更新到FAST-LIO2的当前帧位姿中,幷进行ikdtree的重构,进而更新submap。其它的效果还不清楚,实测lio部分稳定性很好。用fast-lio_slam就很稳定。融合了fast-lio2和sc-pgo,两部分分开运行,SC-PGO从FAST-LIO2节点获取里程计和激光雷达点云主题。的作者kim在FAST-LIO2的基础上,添加SC-PGO模块,通过加入ScanContext全局描述子,进行回环修正,SC-PGO模块与FAST-LIO2解耦,非常方便,很优秀的工作。

z1872385的博客 3189

Android的基础使用

安卓的基本框架和属性的使用

suiyue010211的博客 1209

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

安卓开发入门教程资源文件

安卓开发入门教程资源文件 去发现同类优质开源项目:https://gitcode.com/ 简介 本资源文件为您提供了一份简化的安卓开发入门教程概要,内容涵盖安卓开发的核心知识点,从开发环境搭建到应用开发、界面设计、数据存储、网络通信等多个方面。旨在帮助初学者快速了解安卓开发的基本流程和关键概念。 内容概览 一、开发环境搭建 安装Android Studio:作为谷歌推出的官方集成开发环境(I...

gitblog_06774的博客 791

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

安卓开发用什么语言!2021Android大厂面试知识分享,看看这篇文章吧!

导语 2020年是转折的一年,2021年算是收获的一年,趁着金三银四开始找工作。先分享一下offer的情况 阿里高德(offer) 爱奇艺(offer) 腾讯视频(offer) 小米(被拒) 今日头条(被拒) 在面试的过程中我深深的感受到,对于一个优秀的安卓开发来说,首先摆在第一位的还是他/她作为一个软件工程师的基本素养。无论你是做前端还是后端,最后定义你的优秀程度的还是作为软件工程师的基本素养,学习能力和编程能力,还有设计能力。 JetPack里的组件 上图就是JetPack中包含的组件列表,每个组

chayel123的博客 1044

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

安卓2.3 窗口跳转和数据的传递存储

不论是桌面应用还是手机应用程序,需要对用户的动作提供响应,这种为用户动作提供响应的机制就是事件处理。基于回调的事件处理和基于监听的事件处理。基于监听的事件处理是一种“面向对象”的事件处理,涉及三种对象:事件源(EventSource)、事件(Event)、事件监听器(EventListener)。

m0_65489276的博客 844

推荐项目:安卓入门实战 —— 打造灵活的登录界面跳转功能

推荐项目:安卓入门实战 —— 打造灵活的登录界面跳转功能 去发现同类优质开源项目:https://gitcode.com/ 在移动应用的浩瀚宇宙中,每个旅程的起点往往是那个简洁而又关键的登录界面。今天,我们为你推荐一个专为安卓开发者设计的实战项目——《安卓开发实战:登录界面跳转》。这个项目不仅是一个学习工具,更是开启安卓应用开发世界的钥匙,特别适合那些渴望实践的初学者和寻求快速原型开发的老手们。 ...

gitblog_09785的博客 476

Android基础之四大基本组件介绍

Android基础之四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。 一:了解四大基本组件 Activity 应用程序 中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。 Activity之间通过In...

年轻就是资本的专栏 959

哪些是android基本组件,Android基础之四大基本组件介绍与生命周期.docx

Android基础之四大基本组件介绍与生命周期Android基础之四大基本组件介绍与生命周期Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。一:了解四大基本组件Activity :应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出...

weixin_39941620的博客 115

android studio基础组件,Android studio基本ui控件

文本类组件文本框设置基本属性语句 android:[ ][ ]中内容 属性值 描述text 字符串 指定文本内容textColor 颜色 设置文本颜色textSize 数值 设置文本中文字大小width 数值 指定文本框宽度height 数值 指定文本框高度hint 字符串 文本框内文本内容为空时,显示提示文本singleLine boolean 指定是否是单行显示在指定方位绘制图像语句 andr...

weixin_39608132的博客 600

android基础-->android基本组件

1、activity 2、service 3、content provide:向外暴漏数据的方法,数据共享的组件 4、broadcast Receiver:广播接收器,监听系统行为

ivan21的专栏 726

Android学习——UI基础组件二

Android基础组件 1.Spinner下拉列表框 静态: &amp;amp;lt;Spinner android:id=&amp;quot;@+id/spinner&amp;quot; android:layout_width=&amp;quot;wrap_content&amp;quot; android:layout_height=&amp;quot;wrap_content&amp;quot;

UUUUUltraman的博客 347

Android基础之四大基本组件介绍与生命周期

 Android基础之四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。 一:了解四大基本组件 Activity : 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。 Activi

IOT_LI的专栏 605

Android 基础组件全解析

自定义 Content Provider 需要继承类,并实现其抽象方法,如query()insert()update()delete()等。@Override// 初始化操作@Override// 查询数据@Override@Override// 插入数据@Override// 删除数据return 0;@Override// 更新数据return 0;在<provider。

m0_57836225的博客 1024

Android_基础知识掌握

AinUser的博客 565
上一篇: 安卓基础 overload与override的区别
下一篇: Mac下Android Studio中获取SHA1和MD5
ysamg
博客等级 码龄15年 6粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值