android初级二

从源Activity 中传递数据

1 //数据写入Intent
2 Intent openWelcomeActivityIntent=new Intent();
3 Bundle myBundelForName=new Bundle();
4 myBundelForName.putString("Key_Name",inName.getText().toString());
5 myBundelForName.putString("Key_Age",inAge.getText().toString());
6 openWelcomeActivityIntent.putExtras(myBundelForName);
7 openWelcomeActivityIntent.setClass(AndroidBundel.this, Welcome.class);
8 startActivity(openWelcomeActivityIntent);

目标Activity 中获取数据

1 //从Intent 中获取数据
2 Bundle myBundelForGetName=this.getIntent().getExtras();
3 String name=myBundelForGetName.getString("Key_Name");
4 myTextView_showName.setText("欢迎您进入:"+name);

使用Bundle在Activity间传递数据2

从源请求Activity 中通过一个Intent 把一个服务请求传到目标Activity 中

 

1 private Intent toNextIntent;//Intent 成员声明
2 toNextIntent=new Intent();//Intent 定义
3 toNextIntent.setClass(TwoActivityME3.this, SecondActivity3.class);
4 //设定开启的下一个Activity
5 startActivityForResult(toNextIntent, REQUEST_ASK);
6 //开启Intent 时候,把请求码同时传递

   

 

在源请求Activity 中等待Intent 返回应答结果,通过重载onActivityResult()方法

 1 protected void onActivityResult(int requestCode,
 2 int resultCode, Intent data) {
 3 // TODO Auto-generated method stub
 4 super.onActivityResult(requestCode, resultCode, data);
 5 if(requestCode==REQUEST_ASK){
 6 if(resultCode==RESULT_CANCELED){
 7 setTitle("Cancel****");
 8 }else if(resultCode==RESULT_OK){
 9 showBundle=data.getExtras();//从返回的Intent中获得Bundle
10 Name=showBundle.getString("myName");//从bundle中获得相应数据
11 text.setText("the name get from the second layout:\n"+Name);
12 }
13 }
14 }

☻ 第一个参数是你开启请求Intent时的对应请求码,可以自己定义。
☻ 第二个参数是目标Activity返回的验证结果码
☻ 第三个参数是目标Activity返回的Intent

目标Activity 中发送请求结果代码,连同源Activity 请求的数据一同绑定到Bundle
中通过Intent 传回源请求Activity 中

1 backIntent=new Intent();
2 stringBundle=new Bundle();
3 stringBundle.putString("myName", Name);
4 backIntent.putExtras(stringBundle);
5 setResult(RESULT_OK, backIntent);//返回Activity结果码
6 finish();

Activity 状态

 

当一个Activity 在屏幕的最上层时(对堆栈的最顶端),它就是属于active 或者running 的状态
如果一个Activity 失去焦点(focus)但还看得到它的画面(比如:一个新的Activity 画面并不是全
屏幕或者它是一个半透明的情况),那失去焦点的Activity 则处在paused 的状态。像这个失去焦点的Activity
它还是完全活着的,并没有消失。(活着的意思是指,Activity 自己本身所有的状态及数据都还是存在的,也
跟窗口管理程序window manager 保持联系着),像这种paused 的Activity,会在一种情况下消失,那就是当
系统的内存不够用之时,系统会自动判断,八部重要的Activity 移除。
③ 如果一个Activity 被其它的Activity 完全的遮盖住时,它仍然保有全部的状态及数据,但因为它已
不再被使用者看见,所以它的画面是被隐藏起来的(画面不需要更新),当系统内存不足时,这种stop 状态
的Activity 时最先被系统考虑拿下来释放内存的。
④ 当一个Activity 处于pause 或stop 的状态时,系统可以要求Activity 结束(finish)或直接移除(kill)
它。当它需要再度呈现在使用者面前时,它必须要能完整的重新启动及回复先前的状态。

什么是服务(Service)

  服务是运行在后台的一段代码。它可以运行在它自己的进程,也可以运行在其他应用程序的上下文
(context)里面,这取决于自身的需要。其他的组件可以绑定到一个服务(Service)上面,通过远程过程调
用(RPC)来调用这个方法。例如:媒体播放器的服务,当用户退出媒体选择用户界面,仍然希望音乐可以
继续播放,这时就是由服务(Service)来保证当用户界面关闭时音乐继续播放的。
如何使用服务
  􀀹 第一种是通过调用Context.startServece()启动,调用Context.stoptService()结束,startService()可以传递参
数给Service。
  􀀹 第二种方式是通过调用Context.bindService()启动,调用Context.unbindService()结束,还可以通过
ServiceConnection 访问Service。二者可以混合使用,比如说我可以先startServece()再unbindService()。
Service的生命周期
  ☻ startService()后,即使调用startService()的进程结束了,Service 仍然还存在,知道有进程调用
stoptService(),或者Service 自己自杀(stopSelf())就没法了
  ☻ bindService()后,Service 就和调用bindService()的进程同生共死,也就是说当调用bindService()的进
程死了,那么它bind 的Service 也要跟着被结束,当然期间也可以调用unbindService()让Service 结

  ☻ 两种方式混合使用时,比如说你startService()了,我bindService()了,那么只有你stoptService()了而
且我也unbindService()了,这个Service 才会被结束

进程生命周期
  ♠ Android 系统将会尝试保留那些启动了的或者时绑定了的服务进程
  ♠ 如果该服务正在进程的onCreate(),onStart()或者onDestroy()这些方法中执行时,那么主进程将会成为
一个前台进程,以确保此代码不会被停止
  ♠ 如果服务已经开始,那么它的主进程会就重要性而言低于所有可见的进程但高于不可见的进程,由
于只有少数几个进程是用户可见的,所以只要不是内存特别低,该服务不会停止。
  ♠ 如果有多个客户端绑定了服务,只要客户端中的一个对于用户是可见的,即认为该服务

使用服务进行音乐播放

//Manifest.xml中的Service定义
<service android:name=".Music">
<intent-filter>
<action android:name="com.liangshan.wuyong.START_AUDIO_SERVICE" />
<category android:name="android.intent.category.default" />
</intent-filter>
</service>
//Service 子类中的Player
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
player = MediaPlayer.create(this, R.raw.seven_days);
player.start();
}
public void onDestroy() {
super.onDestroy();
player.stop();
}
//Activity 中定义的Intent开启相应的Service
startService(new Intent("com.liangshan.wuyong.START_AUDIO_SERVICE"));
stopService(new Intent("com.liangshan.wuyong.START_AUDIO_SERVICE"));

android Ui布局

Activity
􀂋 Android 应用程序基本功能单元
􀂋 本身没有任何屏幕存在
View 和Viewgroup
􀂋 表示在Android 平台上的基本用户界面单元Views
􀂋 android.view.View
􀂾 为指定的屏幕矩形区域存储布局和内容
􀂾 处理尺寸和布局,绘制,焦点改变,翻屏,按键、手势
􀂾 widget 基类

文本TextView                         输入框EditText
输入法InputMethod                活动方法MovementMethod
按钮Button                           单选按钮RadioButton
复选框Checkbox                    滚动视图ScrollView

Viewgroups
􀂋 android.view.Viewgroup
􀂾 包含并管理下级系列的Views 和其他Viewgroup
􀂾 布局的基类
UI树状结构
􀂋 Android 中的Activity
􀂾 定义使用一个view 和iewgroup 的树状节点
􀂋 setContentView()方法
􀂾 被Activity 调用来把树状节点连接到屏幕渲染

LayoutParams (布局参数)

普通布局对象

FrameLayout
  􀂋 最简单的布局对象
  􀂋 在屏幕上故意保留的空白空间,你可以之后填充一个单独的对象
  􀂾 例如:一个你要更换的图片
  􀂋 所有子元素都钉到屏幕的左上角
  􀂋 不能为子元素指定位置

LinearLayout
  􀂋 在一个方向上(垂直或水平)对齐所有子元素
  􀂾 所有子元素一个跟一个地堆放
  􀀹 一个垂直列表每行将只有一个子元素(无论它们有多宽)
  􀀹 一个水平列表只是一列的高度(最高子元素的高度来填充)

TableLayout
  􀂋 把子元素放入到行与列中
  􀂋 不显示行、列或是单元格边界线
  􀂋 单元格不能横跨行,如HTML 中一样

AbsoluteLayout

  􀂋 使子元素能够指明确切的X / Y 坐标显示在屏幕上
  􀂾 (0,0)是左上角
  􀂾 当你下移或右移时,坐标值增加
  􀂋 允许元素重叠(但是不推荐)
  􀂋 注意:
    􀂾 一般建议不使用AbsoluteLayout 除非你有很好的理由来使用它
    􀂾 因为它相当严格并且在不同的设备显示中不能很好地工作

RelativeLayout

 

AndroidManifest.xml 中修改程序布局的Theme 主题

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest
 3 xmlns:android="http://schemas.android.com/apk/res/android"
 4 package="zyf.GridViewTest"
 5 android:versionCode="1"
 6 android:versionName="1.0">
 7 <application android:icon="@drawable/icon"
 8 android:theme="@android:style/Theme.Light"
 9 android:label="@string/app_name" >
10 <activity android:name=".GridViewTest"
11 android:label="@string/app_name" >
12 <intent-filter>
13 <action android:name="android.intent.action.MAIN" />
14 <category
15 android:name="android.intent.category.LAUNCHER" />
16 </intent-filter>
17 </activity>
18 </application>
19 <uses-sdk android:minSdkVersion="2" />
20 </manifest>

 

 

posted @ 2013-04-15 10:58  程序world  阅读(114)  评论(0)    收藏  举报