ActivityWord格式文档下载.docx

上传人:b****5 文档编号:21183605 上传时间:2023-01-28 格式:DOCX 页数:31 大小:1.59MB
下载 相关 举报
ActivityWord格式文档下载.docx_第1页
第1页 / 共31页
ActivityWord格式文档下载.docx_第2页
第2页 / 共31页
ActivityWord格式文档下载.docx_第3页
第3页 / 共31页
ActivityWord格式文档下载.docx_第4页
第4页 / 共31页
ActivityWord格式文档下载.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

ActivityWord格式文档下载.docx

《ActivityWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《ActivityWord格式文档下载.docx(31页珍藏版)》请在冰豆网上搜索。

ActivityWord格式文档下载.docx

onPause()和onStop()被调用的前提是:

打开了一个新的Activity!

而前者的旧Activity还是可见状态;

后者的就Activity已经不可见。

2.Activity的创建流程

注:

Android中的四大组件,只要你定义了,无论你用没用,都要在AndroidManifest.xml对这个组件进行声明,不然运行时程序会直接退出,报ClassNotFindException…

onCreate()一个参数和两个参数的区别:

在AndroidStudio中重写的Activity的onCreate()方法时会发现有两个参数:

正常只有一个参数:

这个就是5.0给我们提供的新的方法,要用它先得在配置文件中为我们的Activity设置一个属性:

android:

persistableMode="

persistAcrossReboots"

然后我们的Activity就拥有了持久化的能力了,一般我们会搭配另外两个方法来使用:

1、publicvoidonSaveInstanceState(BundleoutState,PersistableBundleoutPersistentState)

在下列情况下用:

1、点击home键回到主页或长按后选择运行其他程序

2、按下电源键关闭屏幕

3、启动新的Activity

4、横竖屏切换时,肯定会执行,因为横竖屏切换的时候会先销毁Activity,然后再重新创建

5、重要原则:

当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(你可以保存也可以不保存)。

2、publicvoidonRestoreInstanceState(BundlesavedInstanceState,PersistableBundlepersistentState)

onCreate同样可以从取出前者保存的数据:

一般是在onStart()和onResume()之间执行!

之所以有两个可以获取到保存数据的方法,是为了避免Activity跳转而没有关闭,然后不走onCreate()方法,而你又想取出保存数据~

3.启动和退出一个Activity的几种方式

启动

在Android中我们可以通过下面两种方式来启动一个新的Activity,注意这里是怎么启动,而非启动模式!

分为显示启动和隐式启动!

1.显式启动:

通过包名来启动,写法如下:

①最常见的:

startActivity(newIntent(当前Act.this,要启动的Act.class));

②通过Intent的ComponentName:

ComponentNamecn=newComponentName(“当前Act的全限定类名”,”启动Act的全限定类名”);

Intentintent=newIntent();

intent.setComponent(cn);

startActivity(intent);

③初始化Intent时指定包名:

Intentintent=newIntent(“android.intent.action.MAIN”);

intent.setClassName(“当前Act的全限定类名”,”启动Act的全限定类名”);

startActivity(intent);

2.隐式启动:

通过Intent-filter的Action,Category或data来实现这个是通过Intent的*intent-filter*来实现的:

3.另外还有一个直接通过包名启动apk的:

Intentintent=getPackageManager().getLaunchIntentForPackage

(“apk第一个启动的Activity的全限定类名”);

if(intent!

=null)startActivity(intent);

退出

有时我们可能会打开了很多个Activity,突然来个这样的需求,在某个页面可以关掉所有的Activity并退出程序!

就是用一个list集合来存储所有Activity!

1、随时关闭所有Activity

publicclassActivityCollector{

publicstaticLinkedList<

Activity>

activities=newLinkedList<

();

publicstaticvoidaddActivity(Activityactivity)

{

activities.add(activity);

}

publicstaticvoidremoveActivity(Activityactivity)

activities.remove(activity);

publicstaticvoidfinishAll()

for(Activityactivity:

activities)

if(!

activity.isFinishing())

activity.finish();

}

2、完全退出App的方法

上面说的是关闭所有Activity的,但是有些时候我们可能想杀死整个App,连后台任务都杀死杀得一干二净的话,可以使用搭配着下述代码使用:

publicvoidAppExit(Contextcontext){

try{

ActivityCollector.finishAll();

ActivityManageractivityMgr=(ActivityManager)context

.getSystemService(Context.ACTIVITY_SERVICE);

activityMgr.killBackgroundProcesses(context.getPackageName());

System.exit(0);

}catch(Exceptionignored){}

3、双击退出程序的两种方法:

1)定义一个变量,来标识是否退出

privatestaticbooleanisExit=false;

HandlermHandler=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

super.handleMessage(msg);

isExit=false;

}

};

publicbooleanonKeyDown(intkeyCode,KeyEventevent){

if(keyCode==KeyEvent.KEYCODE_BACK){

if(!

isExit){

isExit=true;

Toast.makeText(getApplicationContext(),"

再按一次退出程序"

Toast.LENGTH_SHORT).show();

//利用handler延迟发送更改状态信息

mHandler.sendEmptyMessageDelayed(0,2000);

}else{

exit(this);

returnfalse;

returnsuper.onKeyDown(keyCode,event);

}

2)保存点击时间:

//保存点击的时间

privatelongexitTime=0;

if((System.currentTimeMillis()-exitTime)>

2000){

exitTime=System.currentTimeMillis();

exit();

returnsuper.onKeyDown(keyCode,event);

4.Activity响应系统状态变化

前面也也说到了App横竖屏切换的时候会销毁当前的Activity然后重新创建一个,你可以自行在生命周期的每个方法里都添加打印Log的语句,来进行判断,又或者设一个按钮一个TextView点击按钮后,修改TextView文本,然后横竖屏切换,会神奇的发现TextView文本变回之前的内容了!

横竖屏切换时Act走下述生命周期:

onPause->

onStop->

onDestory->

onCreate->

onStart->

onResume

关于状态变化可能遇到下述问题:

1、如何禁止屏幕横竖屏自动切换

在AndroidManifest.xml中为Act添加一个属性:

screenOrientation

有下述可选的值:

unspecified:

默认值由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.

landscape:

横屏显示(宽比高要长)

portrait:

竖屏显示(高比宽要长)

user:

用户当前首选的方向

behind:

和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)

sensor:

有物理的感应器来决定。

如果用户旋转设备这屏幕会横竖屏切换。

nosensor:

忽略物理感应器,这样就不会随着用户旋转设备而更改了(”unspecified”设置除外)。

2.横竖屏时想加载不同的布局:

1)准备两套不同的布局,Android会自己根据横竖屏加载不同布局:

创建两个布局文件夹:

layout-land横屏,layout-port竖屏

然后把这两套布局文件丢这两文件夹里,文件名一样,Android就会自行判断,然后加载相应布局了!

2)自己在代码中进行判断,自己想加载什么就加载什么:

我们一般是在onCreate()方法中加载布局文件的,我们可以在这里对横竖屏的状态做下判断,关键代码如下:

if(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE){

setContentView(R.layout.横屏);

elseif(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT){

setContentView(R.layout.竖屏);

3、通过onConfigurationChanged拦截横竖屏变换

Activity每次横竖屏切换都会重新调用onPause->

onStop->

onCreate->

onResume,为此涉及到内容和数据的保存和读取,否则转屏之前的内容就会消失了。

很多时候这样的结果让程序繁琐,为此Android提供了在manifest中设置android:

configChanges属性,从而让Activity不延续上述的重建流程。

在Android工程的Mainfest.xml中配置Activity:

configChanges="

keyboardHidden|orientation"

,横竖屏切换之后就不会去执行OnCreat函数了,而是会去调用onConfigurationChanged()这样就能控制横竖屏的切换了。

用户可以在Activity或View的onConfigurationChanged(ConfigurationnewConfig)函数中获取当前横竖屏参数。

至于其调用顺序跟touch时间的传递顺序相似,不过他没有消费事件的概念,会顺次调用到每一个onConfigurationChanged函数。

需要重写Activity的onConfigurationChanged方法。

实现方式如下,不需要做太多的内容:

@Override

publicvoidonConfigurationChanged(ConfigurationnewConfig){

super.onConfigurationChanged(newConfig);

if(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE){

//landdonothingisok

}elseif(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT){

//portdonothingisok

需要注意的是,onConfigurationChanged函数中只能获得横竖屏切换后的参数,在该函数中获取不到新的Layout和控件的尺寸位置信息,如果要处理尺寸和位置信息,必须通过消息异步或者延时调用。

4.状态保存问题:

这个上面也说过了,通过一个BundlesavedInstanceState参数即可完成!

三个核心方法:

onCreate(BundlesavedInstanceState);

onSaveInstanceState(BundleoutState);

onRestoreInstanceState(BundlesavedInstanceState);

你只重写onSaveInstanceState()方法,往这个bundle中写入数据,比如:

outState.putInt(“num”,1);

这样,然后你在onCreate或者onRestoreInstanceState中就可以拿出里面存储的数据,不过拿之前要判断下是否为null

savedInstanceState.getInt(“num”);

5.系统给我们提供的常见的Activity

//1.拨打电话

//给移动客服10086拨打电话

Uriuri=Uri.parse("

tel:

10086"

);

Intentintent=newIntent(Intent.ACTION_DIAL,uri);

//2.发送短信

//给10086发送内容为“Hello”的短信

smsto:

Intentintent=newIntent(Intent.ACTION_SENDTO,uri);

intent.putExtra("

sms_body"

"

Hello"

//3.发送彩信(相当于发送带附件的短信)

Intentintent=newIntent(Intent.ACTION_SEND);

content:

//media/external/images/media/23"

intent.putExtra(Intent.EXTRA_STREAM,uri);

intent.setType("

image/png"

//4.打开浏览器:

//打开Google主页

"

Intentintent=newIntent(Intent.ACTION_VIEW,uri);

//5.发送电子邮件:

(阉割了Google服务的没戏!

!

//给someone@发邮件

mailto:

someone@"

//给someone@发邮件发送内容为“Hello”的邮件

intent.putExtra(Intent.EXTRA_EMAIL,"

intent.putExtra(Intent.EXTRA_SUBJECT,"

Subject"

intent.putExtra(Intent.EXTRA_TEXT,"

text/plain"

//给多人发邮件

Intentintent=newIntent(Intent.ACTION_SEND);

String[]tos={"

1@"

2@"

//收件人

String[]ccs={"

3@"

4@"

//抄送

String[]bccs={"

5@"

6@"

//密送

intent.putExtra(Intent.EXTRA_EMAIL,tos);

intent.putExtra(Intent.EXTRA_CC,ccs);

intent.putExtra(Intent.EXTRA_BCC,bccs);

message/rfc822"

//6.显示地图:

//打开Google地图中国北京位置(北纬39.9,东经116.3)

geo:

39.9,116.3"

//7.路径规划

//路径规划:

从北京某地(北纬39.9,东经116.3)到上海某地(北纬31.2,东经121.4)

116.3&

daddr=31.2121.4"

//8.多媒体播放:

Intentintent=newIntent(Intent.ACTION_VIEW);

file:

///sdcard/foo.mp3"

intent.setDataAndType(uri,"

audio/mp3"

//获取SD卡下所有音频文件,然后播放第一首=-=

Uriuri=Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"

1"

//9.打开摄像头拍照:

//打开拍照程序

Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);

startActivityForResult(intent,0);

//取出照片数据

Bundleextras=intent.getExtras();

Bitmapbitmap=(Bitmap)extras.get("

data"

//另一种:

//调用系统相机应用程序,并存储拍下来的照片

time=Calendar.getInstance().getTimeInMillis();

intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(newFile(Environment

.getExternalStorageDirectory(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1