android开发--布局Android应用开发3使用Bundle在Activity间传递数据从源Activity 中传递数据//数据写入Int
android开发--布局
Android应用开发3
使用Bundle在Activity间传递数据
从源Activity 中传递数据
//数据写入IntentIntent openWelcomeActivityIntent=new Intent();Bundle myBundelForName=new Bundle();myBundelForName.putString("Key_Name",inName.getText().toString());myBundelForName.putString("Key_Age",inAge.getText().toString());openWelcomeActivityIntent.putExtras(myBundelForName);openWelcomeActivityIntent.setClass(AndroidBundel.this, Welcome.class);startActivity(openWelcomeActivityIntent);目标Activity 中获取数据
//从Intent 中获取数据Bundle myBundelForGetName=this.getIntent().getExtras();String name=myBundelForGetName.getString("Key_Name");myTextView_showName.setText("欢迎您进入:"+name);使用Bundle在Activity间传递数据2
从源请求Activity 中通过一个Intent 把一个服务请求传到目标Activity 中
private Intent toNextIntent;//Intent 成员声明toNextIntent=new Intent();//Intent 定义toNextIntent.setClass(TwoActivityME3.this, SecondActivity3.class);//设定开启的下一个ActivitystartActivityForResult(toNextIntent, REQUEST_ASK);//开启Intent 时候,把请求码同时传递
在源请求Activity 中等待Intent 返回应答结果,通过重载onActivityResult()方法
第一个参数是你开启请求Intent时的对应请求码,可以自己定义。
第二个参数是目标Activity返回的验证结果码
第三个参数是目标Activity返回的Intent
目标Activity 中发送请求结果代码,连同源Activity 请求的数据一同绑定到Bundle
中通过Intent 传回源请求Activity 中
Log与DDMS(查看Log等信息)
@Overrideprotected void onActivityResult(int requestCode,int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if(requestCode==REQUEST_ASK){if(resultCode==RESULT_CANCELED){setTitle("Cancel****");}else if(resultCode==RESULT_OK){showBundle=data.getExtras();//从返回的Intent中获得BundleName=showBundle.getString("myName");//从bundle中获得相应数据text.setText("the name get from the second layout:\n"+Name);}}}backIntent=new Intent();stringBundle=new Bundle();stringBundle.putString("myName", Name);backIntent.putExtras(stringBundle);setResult(RESULT_OK, backIntent);//返回Activity结果码finish();Log.v("TAG", "nextPage_Activity onStart()");//设置标签来跟踪程序Activity生命周期
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)
它。当它需要再度呈现在使用者面前时,它必须要能完整的重新启动及回复先前的状态。
Activity 状态转换图
Android应用开发4使用Service
什么是服务(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
<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="zyf.GridViewTest"android:versionCode="1"android:versionName="1.0"><application android:icon="@drawable/icon"android:theme="@android:style/Theme.Light"android:label="@string/app_name" ><activity android:name=".GridViewTest"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><categoryandroid:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><uses-sdk android:minSdkVersion="2" /></manifest>