Activity中的常用进程函数与常用组件简述

获取一个Activity中的实际控件并操作 一个很头疼的问题:做单元测试时,经常遇到界面与逻辑相耦合的情况: 想调用一个私有函数,必须通过其它公有函数来完成,而公有函数(或这个私有函数)的调用又涉及到一系列变量及控件的初始化,如果强行调用/使用反射调用,就会不可避免的出现NullPointerException。 解决方案: 使用ActivityInstrumentationTestCase2来获取实际的Activity与控件 阅读详情

在我的另外一个注册的博客里面的文章,这次想要整理一下自己的小小的片段


原文链接:http://blog.youkuaiyun.com/beta112011/article/details/6637446


Activity是负责屏幕的显示,每个Activity都存在一个显示界面,Activity是用户直接使用的体验。许多人都将“Activity”翻译为“活动”。多数可执行代码都是以活动的形式存在。开发者自己的活动都是重载Activity的一些函数来进行各种事件和消息的处理。下面介绍几个活动常常使用的几个方法和几个常用的界面组件的代码。

一.Android常用函数简述:

1. onCreate

    应用程序的一个活动启动后,系统会调用它的onCreate方法。所以onCreate方法主要是完成活动和程序的初始化工作。如创建自己的视图(使用setContentView方法),打开需要用到的数据库等自定义的操作。onCreate方法的使用格式常常是“onCreate(Bundle savedInstanceState)”,其中的Bundle类型的参数savedInstanceState保存的是该应用程序上一次执行时所保留的运行状态。

2. onStart

应用程序中的某个活动显示之前一般会调用onStart方法,此方法执行完毕会出现两种情况,一是活动显示于手机屏幕上,下一步由onResume方法控制;二是因为某些原因,如AndroidManifest文件设置不正确,活动不能显示于手机屏幕上,程序的控制权就会传递给onStop方法。

3. onResume

    当活动在前台显示时或者重新获得前台显示权,此时onResume方法就会被执行。活动处于运行状态,手机用户可以通过各种操作与活动实现交互。

4. onPause

    当一个活动将要交出前台显示权而又不被终止,当前活动的onPause方法就会被执行,执行完毕后失去前台显示权。所以在onPause方法中开发者一方面要注意保存所需要的信息,一方面要为节约手机资源做些考虑和行动,如停止消耗手机CPU或者电池电量的工作。

5. onStop

    被强行终止或者被其他程序夺去前台显示权。

6. onDestroy

活动被终止前执行的最后一个方法。被终止包括任务完成和被Android系统强行终止。

Android活动的周期可以用如下图所示来帮助理解(图片取自Android Application Development书籍,作者:Rick Rogers,John Lombardo,Zigurd Mednieks& Blake Meike):




二.Android常用组件具体实现代码示例:

    这里只举例在XML布局文件中怎么实现这些组件和在java文件中实现的一些基本操作:

1.TextView(文本框):

  Main.xml最简单的初始化:

  <TextView  

    android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

    android:text="@string/hello"

/>

结果显示如下图:


2.Button和ImageButton(按钮):

  Button和ImageButton基本一样,只是一般Button上会显示文字,而ImageButton显示出来的是一张图片而不是文字。

  Button的main.xml文件如下:

  <Button 

       android:id="@+id/button1"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="Button"

       />

  在java文件中需要对复写按钮事件监听函数:

onCreate中的原代码:

@Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        Button btn=(Button) findViewById(R.id.button1);

        

        Button.OnClickListener btnLtn=new Button.OnClickListener(){

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Toast.makeText(Button1Activity.this, "你点击了Button按钮", Toast.LENGTH_SHORT).show();

}

        

        };

        

        btn.setOnClickListener(btnLtn);

}

显示结果如下:


而对于ImageButton而言,其mian.xml文件定义部分如下:

<ImageButton 

       android:id="@+id/imageButton01"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       />

Java源文件中的onCreate方法:

@Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        //通过id获取关联

        ImageButton imbtn=(ImageButton) findViewById(R.id.imageButton01);

      //设置显示的图片

        imbtn.setImageResource(R.drawable.icon);

        

        //设置监听

        ImageButton.OnClickListener imLis=new ImageButton.OnClickListener(){

@Override

public void onClick(View v) {//这个函数里书写点击需要做的处理

// TODO Auto-generated method stub

Toast.makeText(ImageButton1Activity.this, "你点击了ImageButton按钮", Toast.LENGTH_SHORT).show();

}

        

        };

        

        //指定监听

        imbtn.setOnClickListener(imLis);

    }

显示结果:


3.EditText:

main.xml:

<EditText  

    android:id="@+id/editView"

    android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

    android:textColorHint="#0ffff0"

    android:hint="@string/hello"

    />

    <!-- textColorHint是设置提示字体的颜色 -->

    <!-- hint是设置提示内容 -->

Java代码中无需做任何改变就可以显示。



4.CheckBox:

 Main.xml:

<CheckBox 

    android:id="@+id/first"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:text="First"

    />

<CheckBox 

    android:id="@+id/second"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:text="Second"

/>

Java代码中onCreate初始化如下:

@Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        CheckBox first=(CheckBox) findViewById(R.id.first);

        CheckBox second=(CheckBox) findViewById(R.id.second);

        

        CheckBox.OnCheckedChangeListener listener=new CheckBox.OnCheckedChangeListener(){

@Override

public void onCheckedChanged(CompoundButton arg0, boolean arg1) {

if(arg1){

Toast.makeText(CheckBox1Activity.this, "你选择了"+arg0.getText(), Toast.LENGTH_SHORT).show();

}

                else{

Toast.makeText(CheckBox1Activity.this, "你取消了"+arg0.getText(), Toast.LENGTH_SHORT).show();

}

}

        

        };

        

        first.setOnCheckedChangeListener(listener);

        second.setOnCheckedChangeListener(listener);

}

显示结果如下:



5.RadioButton:

  Main.xml:

<RadioGroup

    android:id="@+id/rG"

    android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

    android:orientation="vertical"

    >

    <RadioButton 

       android:id="@+id/rB1" 

       android:text="first"

       />

    <RadioButton 

       android:id="@+id/rB2"

       android:text="second"

       />

</RadioGroup>

Java文件中的源代码:

RadioGroup rG;

RadioButton rb1,rb2;

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        RadioGroup rG=(RadioGroup) findViewById(R.id.rG);

        rb1=(RadioButton)findViewById(R.id.rB1);

        rb2=(RadioButton)findViewById(R.id.rB2);

        

        RadioGroup.OnCheckedChangeListener listener=new RadioGroup.OnCheckedChangeListener(){

@Override

public void onCheckedChanged(RadioGroup group, int checkedId) {

// TODO Auto-generated method stub

if(checkedId==rb1.getId()){

Toast.makeText(RadioButton1Activity.this, "你选择了"+rb1.getText(), Toast.LENGTH_SHORT).show();

}

if(checkedId==rb2.getId()){

Toast.makeText(RadioButton1Activity.this, "你选择了"+rb2.getText(), Toast.LENGTH_SHORT).show();

}

}

        

        };

        

        rG.setOnCheckedChangeListener(listener);

}

显示结果:


6.Spinner:

与上述两种选择相比较,Spinner占用屏幕面积资源最少。

Main.xml:

<Spinner 

android:id="@+id/spinner" 

android:layout_width="fill_parent"

android:layout_height="wrap_content" 

/> 

Java源代码:

//内容

    String[] neirong={

     "first",

            "second",

     "third"

    };

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        Spinner spn=(Spinner) findViewById(R.id.spinner);

        

              

        //导入

        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,neirong);

        spn.setAdapter(adapter);

        

        

        //设置下拉列表风格

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        

        Spinner.OnItemSelectedListener listener=new  Spinner.OnItemSelectedListener(){

@Override

public void onItemSelected(AdapterView<?> arg0, View arg1,

int arg2, long arg3) {

// TODO Auto-generated method stub

Toast.makeText(Spinner2Activity.this, "你选择了"+neirong[arg2], Toast.LENGTH_SHORT).show();

}

@Override

public void onNothingSelected(AdapterView<?> arg0) {

// TODO Auto-generated method stub

}

        

        };       

       spn.setOnItemSelectedListener(listener);

}

显示结果:



以上是自己开发Android的一点关于Activity界面的一些常常查看的代码,感觉是比较常用的,所以分享给大家吧!


另外一个地址链接:http://blog.youkuaiyun.com/beta112011/article/details/6637446

Activity简述 Android Activity件数生命周期 阅读详情

相关推荐

Android四大组件之Activity(八)——新创建的进程:Activity组件和新创建的进程相关联

目标Activity所属的应用进程已经创建好了,接下来包括如下流程: 注册目标Activity所属进程到system_server 目标Activity所属进程创建Application实例对象 一、注册(attach)目标Activity进程到system_server 1、ActivityThread.main 调用attach,向system_server发起一个绑定操作,告诉AMS进程启动完毕,可以进行其他事情了 初始化应用进程的主线程的Looper,并开启loop消息循环 public s

aaqian1的博客 818

如何获取当前Activity实例

之前再弄屏幕截图的时候遇到过一个问题

rj113的专栏 4128

android系统函数大全

详尽系统函数,可做参考学习之用,在其他网站都要充值下载,果断无私奉献···

如何获取Activity的实例

  1.假设你要获取的Activity的类名为MainActivity,在该类中声明一个该类的静态变量,并在onCreate()方法中实例化它,如下: public class MainActivity{        public static MainActivity instance = null;        @Override        public void onC...

全栈攻略 5983

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识,起步是晚了一点,但好歹是开了个头。下面就借助TransFusion论文及其开源代码来串一串这方面的知识。这个很好理解,参考FPointNet网络图示。就是利用现有的2D检测器在图像上提取2D初始框,根据Camera成像原理,捕获2D框视锥内的点云,再利用点云分类模型(如:PointNet)做进一步分类。

4965

别再手动连线了!用Tessent IJTAG的SIB和TDR,5分钟搞定复杂芯片的DFT网络分区

本文探讨了如何利用Tessent IJTAG的SIB(Segment Insertion Bit)和TDR(Test Data Register)技术,高效解决复杂芯片DFT网络分区问题。通过智能化的扫描链管理和声明式定义,显著降低连接复杂度,提升测试覆盖率和良率,适用于超大规模SoC设计。

weixin_29251131的博客 303

Activity跨进程启动流程源码探究

Activity的中文翻译是活动,活动的发起当然是需要一定的场景Context的,那么我们就从context#startActivity这个时刻开始分析~ 1. Context的那些事儿 鉴于本文分析使用的Mac Pro + API26,这里就通过Command + SHIFT + O快捷键输入Context.java可以直接打开目标文件了,点击右侧的Structure标签,按字母表排序可以很清楚...

Edwin_C 的博客 2万+

半导体设备隔振必看:如何用天棚阻尼PID控制实现VC-C级振动抑制(含SIMULINK模型)

本文深入探讨了在半导体精密制造中,如何运用天棚阻尼PID控制算法实现VC-C级振动抑制。通过构建高保真单自由度仿真模型,详细解析了从算法原理、SIMULINK实现到参数整定的全链路方案,并针对谐波扰动提供了陷波滤波器设计方法,为工程师提供了从仿真到实践的完整主动隔振技术指南。

pz89012345的博客 541

Android Activity组件与进程启动间关系

Android Activity组件与进程启动间关系

薛文旺 1391

UVM对象实例化及覆盖的几种方法

UVM对象实例化的方法有多种,以下以object为例: 1)第一种:直接利用new函数进行实例化 trans t1; t1 = new("t1");//利用new函数进行实例化 2)第二种:uvm_component_registry中提供的方法type_id::create,此种方法也是最常使用的方法 trans t2; t2 = trans::type_id::create("t2",this); 3)第三种:uvm_factory中提供的方法creat_object_by_type trans t

沧月九流的博客 3378

思科网络进阶——多生成树协议(MSTP)配置的一课一得

三、实验拓扑1)设计一个网络架构,要有核心层和接入层,都使用思科交换机。2)企业有4个部门,要求这四个部门都可以上网,但分属不同的VLAN中,这样今后可以做其它安全策略以确保网络安全,这些策略如今后学到的访问控制列表ACL。3)网络架构的设计要具有冗余,防止一条线路或一台设备终端导致的业务中断。4)由于硬件冗余而产生的环路要处理好,也就是要在逻辑上(或者说通过配置)防止物理环路的产生。5)不能因为防止物理环路而导致某端口没有流量,这样浪费端口资源及设备间互联的带宽资源。

zhu52010的博客 3400

面试:Activity的启动流程简述

Activity的启动的整体流程: 1. Launcher进程请求AMS 2. AMS发送创建应用进程请求 3. Zygote进程接受请求并孵化应用进程 4. 应用进程启动ActivityThread 5. 应用进程绑定到AMS 6. AMS发送启动Activity的请求 7. ActivityThread的Handler处理启动Activity的请求 面试必备:Android(9.0)Activity启动流程(一) - 掘金 面试必备:Android(9.0)Activity启动流程(二

王温暖的博客 6199

【PCIe 总线及设备入门学习专栏 6.2 -- PCIe VDM (Vendor Defined Messages)】

在PCIe协议中,Vendor Defined Messages (VDMs) 是一种允许厂商定义和传输特定功能的消息类型。这种机制扩展了标准 PCIe 消息的功能,可以用于实现供应商自定义的功能,例如固件更新、设备配置和诊断信息传输。PCIe VDM 是通过实现的,它遵循 PCIe 协议栈的结构,包括事务层、数据链路层和物理层。

CodingCos的博客 1898

activity启动流程简述

Activity是Android四大组件中唯一与用户交互的组件,也是最重要,最复杂的组件, 这里以在新进程中启动Activity为例介绍其启动流程.由于Activity启动过程复杂,代码量大,这里就不贴代码了,直接写调用的函数和作用. 发起进程: Activity.startActivity() Instrumentation.execStartActivity() 调用标准语句A

xutao20170209的博客 3120

【2026 Science Robotics】Learning realistic lip motions for humanoid face robots

哥伦比亚大学Yuhang Hu团队提出了一种创新方法,通过10自由度软体嘴唇设计和自监督学习算法解决仿人机器人嘴唇动作僵硬问题。研究采用变分自编码器(VAE)和面部动作Transformer(FAT)模型,将语音信号转化为机器人可执行的电机指令。实验表明,该方法在多语言测试中表现优异,用户偏好率达62.5%,显著提升了口型同步的真实感和流畅度。该成果突破了传统机械结构的限制,为跨越"恐怖谷效应"提供了有效解决方案。

志在山顶的人,不会贪念山腰的风景 308

第二节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - Python Flask 后端开发详解(附源码)

大家好,我是cuiwin!本节内容,我们从零开始开发基于Python(Flask)的后端项目,对接Vue Vben Admin(vben5)。登录mysql数据库执行: 创建数据库。

cuiwin的专栏 2270

安卓进程都有Application和Activity吗?

摘要: Android系统中,只有应用(App)进程才会包含Application对象和Activity等组件,这些组件由框架层管理,生命周期由AMS调度。系统服务进程(如system_server、media_server)运行的是底层服务或原生代码,不涉及App框架,因此没有Application或Activity。特殊情况下,预装的系统应用(如“设置”)属于普通App进程,仍包含这些组件。简言之,系统服务进程与App进程的组件结构完全不同。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1037

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Activity的启动流程,如何判断当前activity所在进程已经启动了

startActivity启动过程分析 https://blog.youkuaiyun.com/luoshengyang/article/details/6689748 看完这两篇干货,应该一清二楚了。 是否启动应用进程的分支在ActivityStackSupervisor#startSpecificActivityLocked方法内部 通过判断当前activity对于的进程名的ProcessRecord是否存在来判断进程是否启动(android-cts-7.1_r20 tag) public fin.

网鱼的栈 2083

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

简述Activity Manager的源码

同时,它还管理着任务栈和返回栈,控制着用户在不同 Activity 之间的导航。此外,Activity Manager 还负责进程管理,决定何时启动新的进程以及何时终止旧的进程,以优化系统资源的使用。Activity Manager 的源码实现了复杂而强大的功能,通过对 Activity 的生命周期、任务栈和进程的精细管理,确保了 Android 系统的稳定性和高效性。理解 Activity Manager 的源码对于深入了解 Android 系统的工作原理以及进行高级应用开发和系统优化都具有重要的价值。

challenge51all的专栏 1151

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

[android]Activity、Task、应用和进程

谁负责管理Activity? Android的framework框架中采用C/S的方式实现由后台服务ActivityManagerService(很多书上将其简称为Ams)来管理具体的Acitivity实例,虽然Ams命名为ActivityManagerService,但是它其实不仅仅管理Activity,他还管理除Acitvity外的其它三大组件,还包括Intent、pendinginte

guomeijuan916的专栏 5184

Android跨进程通信——Activity

在Android应用开发中,会用到跨进程通信的方式,什么是跨进程通信,例如,在第三方应用中调用拨号、短信、邮件等,在这个过程中发生数据的传递,当前应用(一个进程)调用另一个应用(第二个进程),这就是Android中的跨进程通信。在Android中,一共有四种跨进程通信的方式,分别是通过Activity、BroadcastReceiver、ContentProvider和AIDL(Android

Ryan's zone 7058

四大组件—Activity

文章目录Activity1.什么是Activity2.进程优先级3.Activity的启动模式标准模式栈顶复用栈内复用单例模式4.Activity生命周期正常情况下的生命周期:情景分析:异常情况下的生命周期为什么会有异常情况?为什么要重建?重建机制:onSaveInstanceState & onRestoreInstanceState重建流程状态保存和恢复的注意事项5.Activity启动流程 Activity 1.什么是Activity Activity是Android四大组件之一,是负责展示界

RuntimeExecption的博客 1027

Application、进程、Task、Activity理解

查阅了各种资料,以自己的理解加以整理。关于进程 一个Application就是一个应用,在应用启动时,android会启动一个linux进程和一个主线程,这个进程以应用的包名命名,在默认的情况下,这个Application下的Activity、service、provider、receiver等组件都在这个进程中运行。在Manifest中。可以这个组件的“android:process”属性

szyanjian的博客 1881

到底是 Activity 被回收了还是进程被杀死了?

内存不足时,到底是 Activity 被回收了呢,还是进程被杀死了呢,还是二者都出现了呢?

关注移动端、Web、微信小程序等大前端领域 8554

Activity启动流程(一)发起端进程请求启动目标Activity

   Android四大组件之Activity启动流程源码实现详解(一) Activity启动流程源码实现详解系列博客目录: Activity启动流程源码实现详解概要 前言   在正式开始Android四大组件之Activity启动流程源码实现详解之前,如果小伙们还没有阅读Activity启动流程源码实现详解概要,强烈建议先行阅读该概要,因为该篇博客从整体概要和Activity启动的前期知识点出发为我们提供了提纲和将要涉及到的知识点的梳理。在本篇博客中我们将重点分析目标进程发送Activity启动请

IT先森 4538
上一篇: 第二届 Android 应用开发中国大学生挑战赛 提交即获得背包
下一篇: MJAndroid代码下载地址
山禾_Abel
博客等级 码龄15年 30粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值