【Android学习笔记1】应用程序核心理解

1、android应用程序组成部分:
1)活动(activity):应用程序表示层,每个屏幕都是avtivity类的扩展。
2)服务(service):服务组件在后台运行,它们可以更新数据源和可见的活动,并触发通知。
3)内容提供器(content provider):一个可共享的数据存储器。是应用程序家共享数据的首选方法。
4)意图(intent):一个应用程序间的消息传递框架。
5)广播接收器(broadcast receiver):Android中广播的是各种OS发生的事件,比如接收短信,电量低等等,而具体的处理是有广播接收器来执行。
6)小组件(widget):可以添加到主屏幕的可视化应用程序组成。可以用于创建动态交互式应用程序组件。
7)通知(notification):一种用户的通知框架。


2、activity的生命周期:
android操作系统跟踪所有运行的activity对象,它将这些对象放进一个activity栈中。当一个姓的activitu启动时,处于栈顶的activity(即当前的前台activity)将会被暂停,而这个新的activity则被放入栈顶。当新的activity完成时,它被移出栈,而先前的activity则又回到栈顶。

1)onCreate():初始化静态activity数据。onCreate()仅拥有一个参数,即一个bundle对象,但对于首次启动的activity而言,这一参数是空的。如果这一activity先前因为内存的原因而被终止(killed),现在又重新启动,那这个Bundle对象中将包含该activity先前的状态信息,这样,他才能够被重新初始化。

2)onStart():当这个被调用的activity能被用户看到,调用onStart.

3)onResume():初始化和接收Activity数据,当这个activity到达activity栈的顶部,即成为前台进程时,onResume()方法被调用。

4)onPause():停止、保存和释放activity数据。当另一activity移至activity栈的顶部是,当前的activity收到暂停通知,同时onPause()方法被调用。eg:程序运行中,突然有来电跑出来。一般而言,凡在onResume()方法中获取的资源和数据均需要在onPause()方法中释放。

5)onStop():当用户看不见这个Activity 用户调用onstop

6)onDestry():销毁静态activity数据。




3、activity跳转:
Tips:
a、对于"启动画面--应用介绍"这类activity应该只被执行一次。在这种情况下,可以是同startActivity()方法和适当的finish()方法。
b、对于那些经常性的父子activity跳转,可以使用startActivityForResul和onActivityResult()方法。
  • 使用intent在不同的activity之间实现跳转
       1)无参数activity跳转:
    startActivity(new Intent(getApplicationContext(),MyDrawActivity.class));

2)向下一个activity传递数据(使用Bundle和Intent.putExtras):
     Intent it=new Intent(Activity1.this,Activity2.class);
     Bundle bundle=new Bundle();
     bundle.putString("name","This is from MainActivity!");
     it.putExtras("bd",bundle);    //it.putExtra("test","shuju");
     startActivity(it);            //startActivityForResult(it,REQUEST_CODE);效果类似

方法2和方法1类似,但是实现了数据传递,注意Bundle对象类似于HashTable,可以存放一个键和对应的对象。而Intent对象也可以以键值对的方式存放bundle对象,从而实现在Activity1和Acitivty2之间传递数据。在Activity2中可以通过以下方法获得Activity1中传递过来的数据

Intent intent = getIntent();
Bundle bd = intent.getBundleExtra("bd");// 根据bundle的key得到对应的对象
String name=bd.getString("name");

3)在Activity2向上一个Activity返回结果(使用setResult,针对startActivityForResult(it,REQUEST_CODE)启动的activity)
    Intent intent=getIntent();
    Bundle bundle2=new Bundle();
    bundle2.putString("name","This is from ShowmSG");
    intent.putExtras(bundle2);
    setResult(RESULT_OK,intent);

4)Activity1中如果要根据Activity2中传入的参数进行处理,必须在Activity1中的onActivityResult进行处理
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
           // TODO Auto-generated method stub
     super.onActivityResult(requestCode, resultCode, data);
     if (requestCode==REQUEST_CODE){
             if(resultCode==RESULT_CANCELED)
                  setTitle("cancle");
             else if (resultCode==RESULT_OK) {
                      String temp=null;
                       Bundle bundle=data.getExtras();
      if(bundle!=null) temp=bundle.getString("name");
           setTitle(temp);
       }
    }
}






4、intent传递数据:
  • intent作用
android 中intent是经常要用到的。不管是页面调转,还是传递数据,或是调用外部程序,系统功能都要用到intent。

Android的有三个基本组件——Activity,Service和BroadcastReceiver,它们都是通过Intent机制激活的,而不同类型的组件有传递Intent的不同方式。

(1) 要激活一个新的Activity,或者让一个现有的Activity执行新的操作,可以通过调用Context.startActivity()或者Activity.startActivityForResult()方法。这两个方法需要传入的Intent参数也称为Activity Action Intent(活动行为意图),根据Intent对象对目标Activity描述的不同,来启动与之相匹配的Activity或传递信息。

(2) 要启动一个新的服务,或者向一个已有的服务传递新的指令,调用Context.startService()方法或调用Context.bindService()方法将调用此方法的上下文对象与Service绑定。

(3) 通过Context.sendBroadcast()、Context.sendOrderBroadcast()和Context.send-StickBroadcast()这三个方法可以发送BroadcastIntent。BroadcastIntent发送后,所有已注册的拥有与之相匹配IntentFilter的BroadcastReceiver就会被激活。这种机制被广泛运用于设备或系统状态变化的通知,一个常见的例子是,当Android的电池电量过低时,系统会发送Action为BATTERY_LOW的广播,接着任何可匹配该Action的IntentFilter注册的BroadcastReceiver都会各自运行自定义的处理代码,比如关闭设备的WIFI和GPS以节省电池消耗。

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

  • 使用intent在activity间传递数据(看上文)

  • 隐式Intent和运行时绑定
隐式Intent是一种让匿名应用程序组件服务动作请求的机制。当创建一个新的隐式Intent时,你指定要执行的动作,作为可选项,你可以提供这个动作所需的数据。

当你使用这个新的隐式Intent来启动Activity时,Android会在运行时解析它,找到最适合在指定的数据类型上执行动作的类。这意味着,你可以创建使用其它应用程序的工程,而不需要提前精确地知道你会借用哪个应用程序的功能。

例如,如果你想让用户在应用程序里打电话,与其实现一个新的拨号,不如使用一个隐式的Intent来请求一个在一个电话号码(URI表示)上的动作(拨一个号码),如下代码片段所示:

if (somethingWeird && itDontLookGood)
{
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(“tel:555-2368”));
startActivity(intent);
}

Android解析这个Intent并启动一个提供了能在一个号码上执行拨号动作的Activity,在这里,是拨号Activity。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值