Android中的Activity

活动:


AppcompaActivity相对于Activity的主要的两点变化;

1:主界面带有toolbar的标题栏;

2,theme主题只能用androidtheme="@stylelAppTheme (appTheme主题或者其子类),而不能用android:style。否则会提示错误:Caused by. java.lang.llegalStateException:You need to use a Theme.AppCompat theme (or descendant) with thisactivity.

创建的活动类必须在AndroidMainfest中进行注册。

隐藏标题栏的方法:

继承AppCompatActivity if(getSupportActionBar() != null) { getSupportActionBar().hide(); }

继承Activity requestWindowFeature(Window.FEATURE_NO_TITLE);

Toast

Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知用户,在一段时间后会自动消失。

Button button_1 = (Button)findViewById(R.id.button_1); button_1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(FirstActivity.this,"Your click button_1",Toast.LENGTH_LONG).show(); } }); 第三个参数为显示的时长。

因为手机屏幕大小限制,所以在设计界面是如何合理利用空间变得尤为重要。Android给我们提供了一种既可以展示菜单又不占用屏幕空间的方式。那就是在活动中使用Menu.

我们首先在res目录下新建一个menu文件夹(res->New->Directory,文件夹命名为menu),然后在这个文件夹下新建一个菜单文件main(menu->New->Menu resource file,文件命名为main).如下图所示:

然后我们在main.xml中添加代码如下:

menu>

这样我们就创建了两个菜单项了,标签是用来创建具体的一个菜单项,然后通过android:id给菜单项指定一个唯一的标识符,通过android:title给菜单项指定一个名称。

接着我们回到活动中重写onCreateOptionsMenu()方法,代码如下:

public boolean onCreateOptionsMenu(Menu menu){

getMenuInflater().inflate(R.menu.main,menu);

returntrue;

}

  • 4

getMenuInflater()方法可以得到MenuInflater对象,再调用它的inflate()方法可以给当前活动创建菜单啦。

inflate()方法接收两个参数,第一个参数用于指定通过哪一个资源文件来创建菜单,这里就指定了main.xml资源文件所以传入R.menu.main。第二个参数用于指定菜单项将添加到哪一个Menu对象当中,这里直接使用onCreateOptionsMenu()方法传入的menu参数,然后给这个方法返回true,表示允许创建的菜单显示出来,返回false则无法显示。

光这么写只是让菜单显示了出来,并没有响应事件。因此还要定义菜单响应事件。在活动中重写onOptionsItemSelected()方法:

public boolean onOptionsItemSelected(MenuItem item){

switch(item.getItemId()){

case R.id.add_item:

Toast.makeText(this,"You clicked NO1",Toast.LENGTH_SHORT).show();break;

case R.id.remove_item:

Toast.makeText(this,"You clicked 2",Toast.LENGTH_SHORT).show();break;

default:}

return true;}

在onOptionsItemSelected()方法中,通过调用item.getItemId()来判断点击的是哪一个菜单项,然后给每一个菜单项加入逻辑处理。

注意: R.id.add_item在最新的Android中已不再作为一个常量存在,因此当switch报错时可改用if...else...语句代替。

重新运行程序,这时你就会看到右上角的菜单按钮了。点击按钮会显示出菜单选项,再点击菜单选项就会弹出提示语。

销毁一个活动

使用Activity提供的finish()方法可以销毁当前活动。

注意:android中所有的activity都在主进程中,在Androidmanifest.xml中可以设置成启动不同进程,Service不是一个单独的进程也不是一个线程。当你Kill掉当前程序的进程时也就是说整个程序的所有线程都会结束,Service也会停止,整个程序完全退出。

finish函数仅仅把当前Activity退出了,但是并没有释放他的资源。安卓系统自己决定何时从内存中释放应用程序。当系统没有可用内存到时候,会按照优先级,释放部分应用。

Intent

各组件之间进行交互的重要方式。一般用户启动活动,启动服务,发送广播等场景。

显示使用Intent:

两个原则:

一条元素至少应该包含一个,否则任何Intent请求都不能和该匹配。

如果Intent请求的Action和中个任意一条匹配,那么该Intent就可以激活该activity(前提是除了action的其它项也要通过)。

Category:指定当前动作(Action)被执行的环境

即这个activity在哪个环境中才能被激活。不属于这个环境的,不能被激活。

常用的Category属性如下所示:

  • CATEGORY_DEFAULT:Android系统中默认的执行方式,按照普通Activity的执行方式执行。表示所有intent都可以激活它 

  • CATEGORY_HOME:设置该组件为Home Activity。

  • CATEGORY_PREFERENCE:设置该组件为Preference。 

  • CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。 

  • CATEGORY_BROWSABLE:设置该组件可以使用浏览器启动。表示该activity只能用来浏览网页。 

  • CATEGORY_GADGET:设置该组件可以内嵌到另外的Activity中。

注意:如果该activity想要通过隐式intent方式激活,那么不能没有任何category设置,至少包含一个android.intent.category.DEFAULT

活动的生命周期

返回栈

活动是可以层叠的,当我们启动一个新的活动时,就会覆盖原本的活动。

生命周期的四种状态

  • 运行态

位于栈顶时,该活动就处于运行态。

  • 暂停态

不处于栈顶,但该活动可见时,就是处于暂停态。

  • 停止态

不处于栈顶,且看不见时。

  • 销毁态

当活动从返回栈中移除时就是处于销毁态。

活动回收

当一个活动进入了停止状态时,系统可能会将其回收,当我们再返回本界面时会执行onCreate方法重构界面,界面的临时数据将会消失。对此我们可以重写onSaveInstanceState()方法将需要保存的数据保留。

活动的启动模式

系统默认为Standard模式。每当系统启动一个活动时,系统将会启动该活动的一个新的实例,不论该活动在栈中是否存在。

  • singleTop

使用singleTop模式,系统会进行判断,查看栈顶是否存在本活动的实例,若存在直接使用,不存在则创建新的实例。

实现:

在注册文件中的活动注册条添加

<activity

android:name=".MainActivity"

android:exported="true"

android:launchMode="singleTop"

>

  • singleTask

当活动设置为singleTask时,每次启动该活动都会在返回栈中去寻找活动的实例,若找到,则将本实例以上的活动都出栈。使得本实例在返回栈的顶端。

  • singleInstance

使用singleInstance的活动回启动一个新的返回栈管理这个活动。

活动的最佳实践:

  1. 建立一个BaseActivity类继承Activity类,此后所有的活动都继承本类。

  1. 编写一个工具类,类中提供活动链表将所有的链表进行管理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值