• Activity详解


    新建一个Activity会生成一下内容:

    其中里面的setConentView(), 是给Activity加载一个布局,里面传入的是一个布局文件的id。

    新建一个Activity时默认会自动在AndroidManifest文件中自动注册,如果没有自动注册的话,我们就需要自动手动去注册,不注册,将导致程序运行出现异常,下面看一下注册内容:

    这个是主Activity的注册信息,加上了

    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    表示当前Activity是主Activity,点击应用图标,就会启动这个Activity。

    1.标题栏的隐藏:

      在setContentView()的前面加上一句requestWindowFeature(Window.FEATURE_NO_TITLE);

    2.Activity中使用menu:

      以代码的方式添加menu:

      

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            menu.add(Menu.NONE,1,0,"开始");
            menu.add(Menu.NONE,2,1,"结束");
            return true;
        }
      add(int groupId, int itemId, int order, CharSequence title)

        groupId:表示组别,如果部分在就写Menu.NONE;

        itemId:用来确定不同的菜单,区别item;

        order:item的排放的先后顺序;

        title:item显示的文字内容;

      

        布局方式添加Menu:

        新建Menu资源文件夹:res-->New-->Android resource directory:

        

       确认之后,在res/menu/新建 Menu resource file :

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:id="@+id/first"
            android:title="first"
            />
    
        <item android:id="@+id/second"
            android:title="second"/>
    </menu>
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menu_item,menu);
            return true;
        }
    }

       最后显示:

      

      后面会写再写博客详细介绍Menu

    3.Activity的销毁:

      除了按下Back键可以销毁一个Activity之外,还可以调用finish()方法,直接销毁。

    4.Intent:

      1)显示Intent的使用:

        AActivity调往BActivity:

        Intent intent = new Intent(AActivity.this,BActivity.class);

        startActivity(intent);

      

    5.Intent返回数据给上一个Activity:

      startActivityForResult(intent,1);    ---FirstActivity

      setResult(RESULT_OK,intent);      ----secondActivity 

      onActivtiyResult(int requestCode, int resultCode, intent data);           ---FirstActivity 

      

      第一个Activity

        private TextView tv;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tv = (TextView) findViewById(R.id.tv);
            Button btn = (Button) findViewById(R.id.btn);
            btn.setOnClickListener(this);
        }
    
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode){
                case 1:
                    if (resultCode == RESULT_OK){
                        tv.setText(data.getStringExtra("data"));
                    }
            }
        }

      第二个Activity:

     

    @Override
        public void onBackPressed() {
            Intent intent = new Intent();
            intent.putExtra("data","hello MainActivity");
            setResult(RESULT_OK,intent);
            super.onBackPressed();
        }

      切记第二个Activity中的setResult的内容下载supr的前面。

    6、Activity的各种生命周期

      1)Activity创建时:onCreate()-->onStart()-->onResume()

      2) 按下HOME键:onPause()-->onStop();

      3) 再重新回到Activity:onRestart()-->onStart()-->onResume();

      4) 按下Back键: onPause()-->onStop()-->onDestory();

      

      5) 按下Back键返回上一个Activity时:(B)onPause()-->(A)onRestart()-->(A)onStart()-->(A)onResume()-->(B)onStop()-->(B)onDestory();

      6) A跳转到B时: (A)onPause()-->(B)onCreate()-->(B)onStart()-->(B)onResume()-->(如果B不是透明的,A就不执行onStop()方法);

        当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变

    7、Activity的回收与数据恢复:

      在默认的Activity启动模式下,Activity会不断创建和被回收,可能会导致数据的丢失,所以Activity提供了回调方法onSaveInstanceState(),这个方法会携带一个Bundle参数,把你想要保存的值放在Bundle中,然后在onCreate()方法中也有Bundle参数,用来取出数据。

    8、Activity的四种启动模式:

      standard、singleTop、singleTask、singleInstance

      1) standard :每启动一个新的Activity,都会在返回栈中入栈,并处于栈顶的位置;

      2) singleTop:在启动Activity时,如果返回发现返回栈的栈顶已经是该Activity,则直接使用当前Activity,不会创建新的Activity;

      3) singleTask:每次启动Activity的时候,系统首先会在返回栈中检查是否存在该Activity,如果已经存在,则直接使用该实例,把这个Activity之上的所有Activity全部出栈,如果没有发现,会创建一个新的实例。

      4) singleInstance:活动会启动一个新的返回栈来管理这个Activity;应用场景:当想把一个Activity给自己的应用和其他应用使用的时候;

    9、随时退出程序:

      

    public class ActivityCollector {
        /** Activity的集合 */
        public static List<Activity> activities = new ArrayList<>();
    
        /**
         * 添加Activity到集合,写在Activity的onCreate()方法里
         * @param activity  要添加的Activity
         */
        public static void addActivity(Activity activity){
            activities.add(activity);
        }
    
        /**
         * 移除指定的Activity
         * @param activity 要移除的Activity
         */
        public static void removeActivity(Activity activity){
            activities.remove(activity);
        }
    
        /**
         * 销毁集合中所有的Activity
         */
        public static void finishAll(){
            for (Activity activity:activities){
                if (!activity.isFinishing()){
                    activity.finish();
                }
            }
        }
    }

      

      

      

    GitHub:https://github.com/godfunc
    博客园:http://www.cnblogs.com/godfunc
    Copyright ©2019 Godfunc
  • 相关阅读:
    如何与多个线程的操作epoll fd
    谈谈Runtime类中的freeMemory,totalMemory,maxMemory等几个方法
    JAVA实现实用的ZIP压缩与解压
    HornetQ
    github
    实例解析shell子进程(subshell )
    Linux Shell Scripting Tutorial (LSST) v2.0
    java中byte数组与int类型的转换(两种方式)
    inotifywait实现目录监控
    子shell的$$
  • 原文地址:https://www.cnblogs.com/Godfunc/p/6519572.html
Copyright © 2020-2023  润新知