Activity的一些知识

今天也是蛮生气的,本来写了一大篇幅的笔记,结果保存草稿完之后博客园崩了一下,全没了,算了,重新写一份吧

首先是关于AndroidManifest.xml的一些介绍

 

 style.xml也需要查一查  设置全局变量的快捷键的ctrl + alt +F 会和qq冲突,注意修改qq的快捷键。 getIntent()不管跳转不跳转,都不会返回空值

 

每个活动对应一个标签,这里注意了,我可以给多个活动设置开机自启动的过滤器,只不过会按照从上往下的顺序进行执行。当声明了两个或者以上的自启动的话,就会生成多个app图标

这里的action的name用来表示系统动作或者是自定义的活动的名字,作为唯一标识。

category标签的name属性,DEFAULT代表默认启动时不会在手机的主页面创建一个图标,而LAUNCHER会生成一个图标
其次label属性可以改名字,icon属性可以改图标,关于矢量图和位图这块的内容需要再进一步学习。设置多个自启动标志的好处是可以方便我们进行测试修改。

其次是有关Intent的用法,之前只知道一个startActivity方法,也就是直接跳转执行,显示的执行

今天看到了一个隐式的用法,可以用以下几种来执行

Intent intent = new Intent();
intent.setAction();
intent.addCategory();
上面的这种,里面传的参数应该和xml配置文件name属性名一致,这里action既可以写在构造方法里面也可以单独写出来

 

 

 Intent intent = new Intent();
        intent.setClassName("com.android.chrome","com.google.android.apps.chrome.Main");
        intent.setPackage();
        intent.setClassName();
        ComponentName componentName = new ComponentName("com.android.chrome","com.google.android.apps.chrome.Main");
     intent.setComponentName(componentName); startActivity(intent);

这里的package和className是诸如浏览器短信之类的类名和包名,隐式意图多用于应用之间的跳转,而显示意图用于应用内部的跳转

后来看了一点有关adb指令相关的东西,首先是把SDK里面的设置环境变量,然后就能使用了

其次下载了grep过滤的一个控件,用来在控制台过滤一部分日志信息,通过shell指令还能完成一些类似于linux的操作。这里我也没学多少,放个网站吧。

https://notes.sunofbeach.net/pages/f5a5ed/

其次通过Intent传递数据,基本数据类型用putExtra(String,Object)即可

自定义类型的话需要实现序列化接口或者使用谷歌的Parcelable接口,然后也是通过putExtra的方法传参。

 

 

 

 再来说一下如何通过Intent模拟短信和拨打号码,拨打号码的代码如下所示:

复制代码
       Intent intent = new Intent();
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)== PackageManager.PERMISSION_GRANTED) {
            intent.setAction(Intent.ACTION_CALL);//有权限则直接ACTION_CALL
            intent.setData(Uri.parse("tel:10086"));
            startActivity(intent);
        }else{
            ActivityCompat.requestPermissions(this,new String []{Manifest.permission.CALL_PHONE},1);//无权限则询问开启权限
            intent.setAction(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:10086"));
            startActivity(intent);
        }
复制代码

这里需要在xml里面写上权限,在6.0之后都是动态获取权限了,也就是上面的代码所示

<uses-permission android:name="android.permission.CALL_PHONE" />

其次要说明uri这个对象的tel:这个是前缀,必须要这么写,在xml里面的表示就是

<data android:scheme="tel"/>data标签也是写在intent-filter标签里面的,data标签的引用使得隐式意图多了一个限制的条件,也可以通过

intent.setData("uri.parse("tel:10086") 和intent.getData()来获取到uri的内容

模拟短信同理,这里就之间放代码了。

 

 

 

 

 

 

 

 

 然后简单说一下intent来实现数据的回传

首先需要startActivityForResult(intent,int 这里第二个参数是请求码,用来执行onActivityResult方法用的)传一个intent ,在另一个Activity中获取到intent内容之后,再new一个intent 

最后setResult("第一个参数是响应码“,intent); finish();

后来通过intent调用系统相机并返回至页面,用到位图和数据回传,具体代码如下:

复制代码
  iv_show = findViewById(R.id.iv_show);
        iv_take = findViewById(R.id.iv_take);
        iv_take.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction("android.media.action.IMAGE_CAPTURE");
                intent.addCategory(Intent.CATEGORY_DEFAULT);
                startActivityForResult(intent,1);
            }
        });
   @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==1&&resultCode== Activity.RESULT_OK&&data!=null){

            Bitmap resultMap = data.getParcelableExtra("data");
            iv_show.setImageBitmap(resultMap);

        }else if(requestCode==1&&resultCode==Activity.RESULT_CANCELED){
            Toast.makeText(this, "您取消了拍照", Toast.LENGTH_SHORT).show();
        }
    }
复制代码

 

最后了解了一下Activity的生命周期,之前我只知道onCreate onStart onResume onPause onStop onDestory的执行流程

没想到我们也可以在这六个方法里面执行一些逻辑代码,对于onCreate和onDestory来说,他们是相对了,这里举个小例子,如果我们填写一个数据,然后再次打开的时候还想看到之前填写的数据,我们可以在onDestory方法里面通过共享参数来持久化保存我们的数据,当再次onCreate的时候,先判断,如果不为null,就把共享参数的数据回传给EditText等等。

onStart和onStop方法是相对的。这里可以拿看电影的时候突然来了电话作为例子,来了电话就会执行onStop方法,我们可以在这个方法里面书写让电影暂停播放的代码

然后打完电话之后接着执行onStart方法,再执行其他的操作。

onStart方法执行完之后其实就可以看到页面了,onResume方法在onStart的基础上可以获取焦点了。

onResume方法用于获取焦点,onPause用于失去焦点,当我们从第一个活动跳转至第二个活动时

如果第二个活动的主题设置为透明的话,就仍能看到第一个活动,这个时候第一个活动只执行onPause方法也就是失去焦点,不会执行onStop方法。

 

 上图就是设置主题为透明。

横竖屏切换会执行onDestory方法然后再次执行onCreate onStart onResume的方法

了解到了findViewById获取到控件之后,调用post()方法传参是一个实现Runnable接口的实现对象,重写run方法,里面的代码是在主线程执行的,执行时机是在AttachToWindow之后执行的。

当我们打游戏看视频的时候横竖屏切换如果重新执行onCreate方法的话显然是不能给用户体验的。

以下给出两种解决方式

第一种,强制只能竖屏或者横屏,比如王者荣耀等手游。

 

 给screenOrientation设置为横屏。

 

 第二种解决方案就是如上图所示:configChanges给他添加这三个属性。

 


同时Activity有个launchMode属性,用来设置任务栈的不同方式

第一种也是默认的模式 launchMode = "standard"

第二种模式是launchMode = "singleTop"模式,如果当前活动处于栈顶,则不会重复创建该活动。

 

posted @   -她的梦-  阅读(271)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
  1. 1 碧天伴走 MyGO!!!!!
  2. 2 影色舞 MyGO!!!!!
  3. 3 詩超絆 MyGO!!!!!
  4. 4 迷路日々 MyGO!!!!!
  5. 5 歌いましょう鳴らしましょう MyGO!!!!!
  6. 6 壱雫空 MyGO!!!!!
壱雫空 - MyGO!!!!!
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 藤原優樹

作曲 : hisakuni

编曲 : hisakuni

もしこの雨が上がっても

忘れずに歩いてくよ

最初のひとしずくに 顔上げた今日の僕を

透明な傘で作る ひとり分だけの世界

透明な傘で作る ひとり分だけの世界

(遮って隠れた)

そっと逃げ込んでいた

ビニール越しの空から

ビニール越しの空から

こぼれ落ちる音響いて

(弾けた合図)

滲む心へと溶けた

泣きじゃくっている この空といこう

泣きじゃくっている この空といこう

(アスファルト染めていく 溢れ出したスコール)

通り過ぎる時を 待つだけじゃなくて

僕は見つめていたいんだよ

無色でもそこにあるもの

この雨が上がってく時

この雨が上がってく時

なにもなかったように

消えてく傘花みたいに心は

上手に折り畳めないから

過ぎ去ってしまう瞬間を

僕はあつめたいよ ああ ひとしずくを

とめどなく傘にすべり落ちる

とめどなく傘にすべり落ちる

雫が揺れて描いてく(模様)

風に震えては

ぐずついてる僕みたいな

くすんでる今日を映した

迷い続けるこの空といこう

迷い続けるこの空といこう

(曖昧に透ける色 眺めていたい)

ただよう雲だって 1秒先なんて

わからないままいくんだろう

不安で鈍く霞んでく 明日も

もしこの雨が上がっても

もしこの雨が上がっても

忘れたくないから

たった今を書きとめておきたいんだ

この手じゃ届かない

あの空から点線の糸で

つなぐように届いた ひとしずく

いまこの雨が上がってく

いまこの雨が上がってく

最後のひと粒が

小さく光って僕を映した

まだ道は乾かないだろう

潤んだ風を吸い込んだ

僕は連れていこう ああ ひとしずくを

点击右上角即可分享
微信分享提示