Android app开发学习笔记——Android四大组件(上)

01_安卓APP开发流程概览 目录安卓APP开发流程前言一、流程概览二、分步概述1.需求分析2.产品原型设计3.UI视觉设计4、数据库搭建5、服务端开发6、Android客户端开发7、APP程序测试8、上传到应用商店9、APP的维护以及更新总结 安卓APP开发流程 前言 在学习一个新东西的时候,我习惯用总-分-总的方式:总——先将要学习的内容总体框架建立起来,形成最初的知识图谱,分——再将框架中的每一项子内容逐个学习、实践,填充知识图谱,总——最后将所有学到的东西进行归纳总结,形成最终完整详细的知识图谱。这样一轮下来,任何知识都会学的十 阅读详情


Android四大核心组件指的是Activity、Service、Broadcast Receiver 和ContentProvider。四大组件由Android系统进行管理和维护,一般都需要在清单文件中注册或者在代码中动态注册。

  • Activity: 代表一个页面(串口)
  • Service: 在后台默默做一些耗时工作
  • Broadcast Receiver: 对感兴趣的外部事件进行监听,例如监听系统短信、手机网络状态改变等,当然也可以监听自己发送的广播
  • ContentProvider: 多个应用程序之间的数据共享

一、Activity(活动)

Activity(活动)是用的最多、最基本的组件,是一种可以包含界面的组件。Activity代表一个页面,开发者可以通过setContentView(View)把界面(UI)放到该页面上。实现Activity需要进行下面两步:

  • 重写onCreate方法,Activity创建的时候会调用这个方法
  • 在onCreate中调用setContentView(int)设置界面布局,并且可以用findVIewById(int)查找界面上的某个控件

1.Activity的生命周期

  • onCreate():活动第一次创建时被调用。在此完成活动初始化,如加载布局,绑定事件。
  • onStart():此方法调用时表示Activity正在启动,此时Activity已处于可见状态,只是还没有在前台显示,也无法与用户进行交互
  • onResume:此方法回调时说明Activity 已经在前台可见、可以跟用户进行交互了。
  • onPause:此方法调用时表示Activity正在停止。
  • onStop:表示Activity即将停止,此时Activity不可见,仅在后台运行。
  • onRestart:表示Activity正在重启,当Activity由不可见变为可见状态时,该方法被回调。一般是用户打开了一个新的Activity,当前的Activity会被暂停(onPause和onStop被执行了),
    接着又回到当前Activity 页面,onRestart方法就会被回调。
  • onDestroy:此方法调用时表示Activity 即将被销毁,是Activity 生命周期的最后一个方法。在这个方法中可以做一些回收工作和最终的资释放(例如广播、Service等)。在这里插入图片描述

2.启动Activity的两种方式

启动一个Activity,有显示和隐式两种启动方法

显示intent:

一般用于启动同一个应用中的Activity,效率高
用法如下:
先在AndroidManifest.xml中注册NextActivity

Intent intent =new Intent(this,NextActivity.class);
startActivity(intent);

隐式intent:

一般用于启动不同应用中的Activity,通过Intent Filter来实现。因为没有明确指出目标的Activity,所以效率相对低一些。

该方法同样需要在AndroidManifest.xml中注册NextActivity,只不过需要再添加intent-filter过滤器,在过滤器中增加标签,指定name的值(是一个字符串),隐式启动就是根据这个值来找到Activity.

<activity android:name=".NextActivity">
            <intent-filter>
                <action android:name="com.example.acticity.NextActivity" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

接着用上面的name标签的值给Intent的构造方法

Intent intent = new Intent("com.example.acticity.SecondActivity");
startActivity(intent);

3.自定义Toast

Toast是Android系统的一种提示方式,显示某一段对话来提示用户,显示一段时间自动消息,不用占用屏幕空间

先自己封装一个CustomeToast类

    public class CustomToast {
    private static CustomToast _instance = null;
    private Toast toast = null;
    private final int MARGIN_DP = 50;
    private CustomToast() {
    }
    public static CustomToast getInstance() {
        if (_instance == null) {
            _instance = new CustomToast();
        }
        return _instance;
    }
    public void cancel() {
        if (toast != null) {
            toast.cancel();
            toast = null;
        }
    }
    public void showToastCustom(Context ctx, String msg, int gravity) {
        showToastCustom(ctx, msg,R.layout.toast_msg, R.id.txt_toast_message, gravity);
    }
    public void showToastCustom(Context ctx, String msg, int layoutResId, int txtResId, int gravity) {
        cancel();//显示之前取消上次显示   这样每次都能显示最新的
        try {
            if (TextUtils.isEmpty(msg)) {
                return;
            }
            View layout = View.inflate(ctx, layoutResId, null);
            TextView txtMsg = layout.findViewById(txtResId);
            txtMsg.setText(msg);
            toast = new Toast(ctx);
            toast.setDuration(Toast.LENGTH_SHORT);
            if (gravity == Gravity.TOP) {
                int marginVertical = (int) dip2px(ctx, MARGIN_DP);
                toast.setGravity(gravity, 0,marginVertical);
            } else if (gravity == Gravity.BOTTOM) {
                int marginVertical = (int) dip2px(ctx, MARGIN_DP);
                toast.setGravity(gravity, 0,marginVertical);
            } else {
                toast.setGravity(gravity, 0, 0);
            }
            toast.setView(layout);
            toast.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static float dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        float result = dpValue * scale + 0.5f;
        return result;
    }
}

再编写如下Toast消息的页面toast_msg.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_custom_toast"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/toast_bg"
    android:orientation="vertical"
    >
    <TextView
        android:id="@+id/txt_toast_message"
        android:layout_margin="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="10dip"
        android:paddingRight="10dp"
        android:text=""
        android:textColor="#000000"/>
</LinearLayout>

其中toast_bg.xml如下

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="-90"
        android:endColor="@color/浅蓝"
        android:startColor="@color/white" />
    <corners android:radius="5dip" />
    <stroke
        android:width="1dip"
        android:color="#EEEEEE" />
</shape>

使用时仅需

CustomToast.getInstance().showToastCustom(Firstactivity.this,"干的漂亮!",Gravity.BOTTOM);

即可有如下效果
在这里插入图片描述
自定义Toast比自带的Toast好看,并且想显示什么效果只需要修改布局文件即可

4.Activity启动与退出动画

overridePendingTransition(enterAnim,exitAnim)

  • 参数enterAnim表示的是从Activity A跳转到Activity B,进入B动画时的效果
  • 参数exitAnim表示的是从Activity A跳转到Activity B,离开A动画时的效果

使用这个方法有两个注意事项

  • overridePendingTransition方法需要在startActivity方法或者finish方法调用之后立即执行
  • 若进入B或者离开A时不需要动画效果,则可以传值为0
    例如使用Android自带的动画效果
Intent intent0=new Intent(Firstactivity.this,liebiao.class);
startActivity(intent0);
overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);

当然还可以自定义动画效果
首先在res文件夹下新建anim文件夹,在anim文件夹下新建zoomin.xml文件

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator">
    <scale
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXScale="2.0"
        android:fromYScale="2.0"
        android:pivotX="50%p"
        android:pivotY="50%p"
        android:toXScale="1.0"
        android:toYScale="1.0"/>
</set>

其中其中
有一个scale标签,这个标签起到缩放效果。顺便解释一下 scale标签中各个属性的作用,

  • android:duration:动画持续时间,以毫秒为单位。
  • android:fromXScale:起始X尺寸比例。
  • android:fromYScale:起始Y尺寸比例。
  • android:pivotX:缩放起点X轴坐标,取值可以是数值(50)、百分数(50%)、百分数p(50%p)
    当取值为数值时,缩放起点为View 左上角坐标加上具体数值像素;当取值为百分数时,表
    示在当前View左上角坐标加上View宽度的具体百分比;当取值为百分数p时,表示在View
    左上角坐标加上父控件宽度的具体百分比。
  • android:pivotY:同 android:pivotX.
  • android:toXScale:最终X尺寸比例。
  • android:toYScale:最终Y尺寸比例。

再建立一个zoomout.xml文件

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:zAdjustment="top">

    <scale
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%p"
        android:pivotY="50%p"
        android:toXScale=".5"
        android:toYScale=".5"/>

    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="1.0"
        android:toAlpha="0"/>
</set>
  • android:duration:动画持续时间,以毫秒为单位。
  • android:fromAlpha:动画开始的透明度,取值为0.0-1.0,0.0表示完全透明,1.0表示保持原有状态不变

最后采用如下方法调用

overridePendingTransition(R.anim.zoomin, R.anim.zoomout);

ActivityOptions

Google在新的SDK中提供了另一种Activity的过渡动画——ActivityOptions,并且提供了兼容包ActivityOptionsCompat.
这个是Android5.0以上的版本才有的动画效果
内置的Activity之间的切换动画有一下几种效果

  • Explode效果
  • Slide 效果
  • Fade 效果
  • Shared Element效果
(1)Explode效果

在项目的res文件夹下新建transition文件夹,并在transition文件夹下新建explode.xml文件,内容如下

<?xml version="1.0" encoding="utf-8"?>
<explode xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="10000">
</explode>

用如下方法修改startActivity调用

startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(Firstactivity.this).toBundle());

在目标activity的super之后,setContentView之前加入如下代码
先判断版本号足够再开启动画效果

if(Build.VERSION.SDK_INT>Build.VERSION_CODES.KITKAT_WATCH){
Transition explpde = TransitionInflater.from(this).inflateTransition(R.transition.explode);
getWindow().setEnterTransition(explpde);
}
(2)Slide 效果

使用与Explode方法相同slide.xml文件如下

<?xml version="1.0" encoding="utf-8"?>
<slide xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:interpolator/decelerate_cubic"
    android:duration="1000"
    >
    <targets>
        <target android:excludeId="@android:id/statusBarBackground"/>
    </targets>
</slide>
  • interpolator是属性设置插值器,就是用啦控制滑动的速度。这里使用SDK自带的decelerate_cubic
  • duration设置动画执行时间
(3)Fade 效果

淡化效果与前门两种类似,新建fade.xml如下

<?xml version="1.0" encoding="utf-8"?>
<fade xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000">
</fade>
(4)Shared Element 效果

共享元素效果与前面几种效果不同,共享元素是指定元素的过渡,给View增加android:transitionName属性
这里就不详细解释了可以参考Shared Element效果

5.Activity销毁

每个Activity都有自己的生命周期,打开了就要及时关闭,从而释放内存,也可以避免出现未知错误
要关闭当前的Activity,直接调用finish即可finish();
如果想关闭所有Activity,退出程序可以采用
法一

System.exit(0);//使用系统的方法,强制退出,终止程序

法二

android.os.Process.killProcess(android.os.Process.myPid());//直接终止当前的进程

上述两个方法虽然可以终止程序,但是会重启APP,并重新创建一个新的进程,于是我们只能自己想办法去实现

我们先建立一个MyApplication类,继承自Application,用于将所有Activity保存到栈中,便于删除时按顺序删除所有Activitiy。

public class MyApplication extends Application {
    private static Stack<Activity> activityStack;//activity栈
    /**
     * 添加Activity到堆栈
     */
    public void addActivity(Activity activity) {
        if (activityStack == null) {
            activityStack = new Stack<>();
        }
        if(!activityStack.contains(activity)){
            Log.i("ansen","添加Activity:"+activity.getLocalClassName());
            activityStack.add(activity);
        }
    }
    /**
     * 获取当前Activity(堆栈中最后一个压入的)
     */
    public Activity currentActivity() {
        Activity activity = activityStack.lastElement();
        return activity;
    }
    public void removeActivity(Activity activity) {
        if (activity != null&&activityStack.contains(activity)) {
            Log.i("ansen","删除Activity:"+activity.getLocalClassName());
            activityStack.remove(activity);
        }
    }
    /**
     * 结束所有Activity
     */
    public void finishAllActivity() {
        for (int i = 0, size = activityStack.size(); i < size; i++) {
            if (null != activityStack.get(i)) {
                activityStack.get(i).finish();
            }
        }
        activityStack.clear();
        Log.i("ansen","结束所有Activity");
    }
}

我们还需要自定义一个BaseActivity作为所有Activity的父类,重写其创建(onCreate)与销毁(onDestory)方法,使得将创建的Activity自动存入栈中,不用每次单独对每个Activity操作。

public class BaseActivity extends AppCompatActivity {
    private MyApplication myApplication;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (myApplication == null) {
            // 得到Application对象
            myApplication = (MyApplication) getApplication();
        }
        myApplication.addActivity(this);
    }
    //销毁所有Activity方法
    public void finishAllActivity() {
        myApplication.finishAllActivity();//调用myApplication销毁所有Activity方法
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        myApplication.removeActivity(this);
    }
}

此时如果想要在某个Activity中退出程序,销毁所有Activity,只需要调用父类的BaseActivity的finishAllActivity方法即可。

6.Activity与Activity之间传递数据

(1)传递参数

打开一个界面的时候,可能需要把一些之传递过去,称为Activity传递参数。Activity与 Activity 之间基本采用Intent传递参数,通过Bundle实现。
当调用intent.putExtra方法时,系统会创建一个Bundle对象,Bundle对象有一个ArrayMap用来存储数据
此处我们传递了一个字符串

Intent intent=new Intent(this,SecondActivity.class);
 //参数1:key  参数2:value
intent.putExtra("parameter","SecondActivity parameter");
startActivity(intent);

在SecindActivitry中通过如下方法获取刚才的值

public class SecondActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        String value=getIntent().getStringExtra("parameter");
        Log.i("ansen",value);
    }
}

(2)Activity的传值与回传值

采用startActivityForResult基本用法启动新的Activity
其作用是从A页面使用startActivityForResult()跳转到B页面,B页面点击返回时将新写入的值传回到A页面。
这里就不详细解释了
可以参考:
Android startActivityForResult基本用法
注意:在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。

7.Activity软键盘弹出方式

在AndroidManifest.xml 中给 Activiy 设置android:windowSofilnputMode属性,可以避免输入法
面板遮挡输入框的问题。
android:windowSoftInputMode 属性有以下值:

  • stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置。
  • stateUnchanged:当这个Activity出现时,软键盘将一直保持在上一个Activity中的状态,无论是隐藏还是显示。
  • stateHidden:用户选择Activity时,软键盘总是被隐藏。
  • stateAlwaysHidden: 当该 Activity主窗口获取焦点时,软键盘也总是被隐藏的。
  • state Visible:软键盘通常是可见的。
  • stateAlwaysVisible:用户选择Activity时,软键盘总是显示的状态。
  • adjustUnspecified:默认设置,通常由系统自行决定是隐藏或显示。
  • adjustResize:该Activity总是调整屏幕的大小,以便留出软键盘的空间。
  • adjustPan:当前窗口的内容将自动移动,以便当前焦点从不被键盘覆盖和用户总是能够看到输入内容的部分。
    可以设置一个值或者多个值,多个用“”分割,例如:
android:windowSoftInputMode="stateVisible|adjustResize"

还有更多其他值,在这里就不列出了

8.Activity任务栈

Android 任务栈有以下特点:

  • Android 任务栈又称为Task,是一个栈结构,具有后进先出的特性,用于存放我们的Activity组件。
  • 我们每次打开一个新的Activity或者销毁Activity都会在任务栈中增加一条记录或者减少一条记录,任务栈保存Activity集合。
  • 任务栈可以移动到后台,保留每一个Activity的状态,有序地给用户列出它们的任务,并且不丢失状态信息。
  • 当把所有任务栈中的Activity清除出栈时,任务栈会被销毁,程序退出。

Android系统通过任务栈有序地管理每个Activity,并决定用哪个Activity跟用户交互,只有任务栈顶的 Activity才能跟用户进行交互。
任务栈的缺点:

  • 每开启一次页面都会在任务栈中添加一个Activity,只有任务栈中的Activity全部清除出栈时,任务栈才会被销毁,程序才算真正退出,需要点击多次返回键才能退出程序。
  • 每开启一次页面都会在任务栈中添加一个Activity,还会造成数据冗余,重复数据太多,会导致内存溢出的问题(OOM).

为了解决任务栈的缺点,我们引入了启动模式。

9.Activity 四种启动模式

启动模式(launchMode)在多个Activity跳转的过程中扮演着重要的角色,可以决定是否生成新的 Activity实例,是否重用已存在的Activity实例,是否和其他 Activity 实例共用一个task.这
里简单介绍一下task的概念。task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就创建一个与之对应的task.
Activity 一共有四种 launchMode:

  • standard:系统默认的启动模式,即标准模式。
  • singleTop:栈顶复用模式。
  • singleTask:栈内复用模式。
  • singleInstance:全局唯一模式。
    怎么使用呢?很简单,只需要在AndroidManifest.xml文件中给activity 设置android:launchMode
    属性即可。参考如下代码:
<activity android:name=".MainActivity" android:launchMode="standard">
</activity>

这四种启动模式对应不同的跳转模式。接下来详细介绍一下。

1.standard(标准模式)

standard 是Activity 默认的启动方式,如果你需要这种启动方式可以不需要设置android:launchMode 属性。这种模式是每次启动一个 Activiy 都会创建一个新的实例,不管这个例之前是否存在,这种模式下,谁启动了Activity,该Activity就属于启动该Activity的任务栈。

2. singleTop(栈顶复用模式)

这种模式下,如果新打开的Activity 已经在栈顶了,那就不会重新创建Activity实例,只会调用onNewIntent方法,如果新打开的Activity不在栈顶,而是在栈底或者栈中间,还是会创建一个
新的实例。

3. singleTask(栈内复用模式)

singleTask模式下,如果打开一个新的Activity,这个Activity在栈中存在,就会把这个Activity之上的Activity都销毁,然后这个Activity就会置顶。

假设现在有三个 Activity,即 Activity1、Activity2、Activity3,给 Activity1 设置成 singleTask模式。Activity1 启动Activity2,Activity2 启动 Activity3.这时任务栈里面有三个Activity,栈顶是Activity3,这个时候我们开启Activity1,运行之后只有Activity1还会存在。
在这里插入图片描述

使用 singleTask 模式有以下两点需要注意:

  • 如果是其他App以singleTask模式启动 Activity1,将会创建一个新的任务栈。
  • 如果以singleTask模式启动的Activity1 已经在后台的一个任务栈中,那么启动后,后台的任
    务栈一起切换到前台。

4.singlelnstance(全局唯一模式)

singleInstance 模式比较特殊,这种模式下Activity 会单独占用一个栈,这个栈在整个系统中是唯一的。不同的App去打开singlelnstance模式的Activity,如果这个实例存在,不会重新创建。系统中永远只会有一个这样的实例。

部分内容和代码参考自《Android app开发从入门到精通》

uni-app打包成安卓app步骤详解 前置: 开发环境 Android Studio 下载地址:Android Studio官网 OR Android Studio中文社区 HBuilderX App离线SDK下载:最新android平台SDK下载 3.1.10版本起需要申请Appkey,具体请点击链接 正文: 通过uni-app实现一套代码在微信小程序和安卓端app同时适配 1.创建文件 创建Demo文件,采用uni-app 模板 2.创建应用 在https://dev.dcloud.net.cn/app页面创建相同名称的应用,并且获取 阅读详情

相关推荐

【跟着Cursor开发安卓APP】1. 配置安卓开发环境

根据他们的建议,我选择了同意并继续安装。您的 Homebrew、wget、curl 都已经配置好,没有任何问题,可以继续后续的开发环境配置或 Android 项目开发。它首先检查了JDK(Java开发工具包)的安装情况,发现需要安装JDK,并为我列出了具体的安装步骤。我按照他告诉我的方式执行了,上面几个代码都能正常输出,我想这个环境应该都配置完了。最后运行了他给的代码,但是执行完了没有反应,所以我就问他没有反应是正常吗?他说我的环境已经配置好了,但是我不确定是不是完全配置好,所以让他检查一下。

2501_92095624的博客 2331

Android应用程序四大组件

对于一个Android应用程序来说,是由四种关键构造块组织而成的。分别是Activity活动、Service服务、Content Provider内容提供者和BroadcastReceiver广播接收器。但是,并不是每一个Android应用程序都需要这四种构造块。    Android应用开发四大组件分别是:  活动(Activity):用于表现功能,是所有程序的根本...

weixin_34384557的博客 358

图像去雾常见数据集

上述数据集涵盖了室内、室外、真实和合成等多种场景,可以满足不同研究需求。在选择数据集时,建议根据具体任务的应用场景和目标选择合适的数据集,例如真实雾天图像适合模型的实际应用验证,而合成数据则适合模型的快速迭代和训练。希望本文能为从事图像去雾研究的朋友提供一些帮助!

m0_68604571的博客 6334

安卓四大组件

Activity: 是Android应用层开发的四大组件之一,主要负责和用户交互部分,有自己的生命周期,在其上可以布置按钮,文本框等各种控件,简单来说就是Android的UI部分,承担了View的容器和控制器的功能 生命周期:   onCreate()在Activity第一次被创建的时候被调用 onDestroy()在Activity销毁前调用   onStart()在Activit

qq_34566831的博客 364

windows10 + wsl2安装docker

一、安装wsl https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 1.1以管理员身份运行powershell 1.2执行如下命令 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 1.3重启电脑 1.4 重启电脑后,如果需要安装wsl2, 则安装官方文档继续后续操作,因我...

happytree001的博客 1568

Visual Studio 命令提示符工具区别与使用场景

Visual Studio会提供一系列命令提示符工具,这些工具应用在哪些场景呢?本文进行了相关介绍。

cicada15的博客 3493

Android系统四大组件

分别是活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver) 和内容提供器(ContentProvider)。其中活动是所有Android应用程序的门面,凡是在应用中你看 得到的东西,都是放在活动中的。而服务就比较低调了,你无法看到它,但它会一直在后台默默 地运行,即使用户退出了应用,服务仍然是可以继续运行的。广播接收器允许你的应用接收来自 各处的广播消...

maxyang1212的博客 733

一周一个Unity小游戏2D反弹球游戏 - 球反弹的方向

本文将实现当球在球板上反弹时,会根据球板移动的方向来给球施加反弹的力,例如当球板往左移动时反弹球,则球应向左上方反弹,若球板往右移动时反弹球,则球应向右上方反弹。

Giver的博客 752

Android点亮屏幕

private void screenOn(){ PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAU

AnongChang 381

【WRF教程第3.5期】预处理系统 WPS 详解:以4.5版本为例

预处理系统 WPS 详解:以4.5版本为例

WW、forever的博客 1422

SpringBoot实现快速导入EXCEL

MaterialMonitorController.java @Log(title = "物料监测", businessType = BusinessType.IMPORT) @RequiresPermissions("system:materialMonitor:import") @PostMapping("/importData") @ResponseBody ...

LEN程序员的一生 4817

Android 四大组件有哪些 功能是什么

Android的四大组件分别是: 1.activity 显示界面 2.service 服务 3.Broadcast Receiver 广播 4.Content Provider 数据通信 1. activity 显示页面: a.首先activity就是一个单独的窗口; 一个activity相当于我们实际中的一个网页, 当打开一个屏幕时,之前的那一个屏幕会被置为暂停状态,并且压入历史堆栈中, 用户可以通过回退操作返回到以前打开过的屏幕。 b.activity

小小彭 4377

【Ranger】mac下Apache Ranger编译安装

a、编译过程中出现测试用例不通过和文件认证错误错误:带上参数-DskipTests=true -Drat.skip=true 重新编译;b、若编译过程中出现缺少jar包的情况,可能下载不了,需要手动自动添加;c、编译所需的其他工具如maven等安装配置略。采用这个会报错,因此我才用了下面一个命令。初始化设置Ranger Admin:执行。然后进入target目录。

九师兄 2103

Android(安卓)APP渗透测试-总结

文章目录基础知识安卓系统目录结构组件基础APK目录结构ADB使用Drozer客户端安全测试反编译测试(脱壳与混淆)脱壳回编译测试本地敏感信息存储四大组件安全本地注入动/静态扫描安全的通信方式HOOK开源移动端扫描工具APP安全在线检测系统服务端渗透测试SSL证书抓包问题安装证书问题证书校验问题 前言:这是一份资料整理,不是一份教程,教程在“心中”。 很多时候对产品进行测试,但是总会遇到一些重复的问题,后来发现大部分时间都花在问题检索和筛选上了(检索五分钟,测试一分钟),因此有了这份总结。学会把时间花费在有意

H5oSir 2万+

手把手教你学simulink(95.1)--PID控制实例:基于Simulink的PID控制温度控制系统建模与仿真

温度控制是工业自动化、家用电器、医疗设备以及航空航天等领域中常见的控制问题。通过精确的温度控制,可以提高生产效率、降低能耗并确保产品质量。PID(比例-积分-微分)控制器因其结构简单、性能稳定且易于实现而被广泛应用于各种温度控制系统。本项目旨在通过MATLAB/Simulink平台设计和验证一个基于PID控制的温度控制系统,重点研究PID参数调优方法、系统动态响应特性以及稳态误差消除能力。

MHD0815的博客 792

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

开发自己的第一个安卓app

开发自己的第一个安卓app 在开发安卓app的时候,首先我们需要配置一下电脑的开发环境。到jdk官网下载最新版本的jdk安装包。 Window64位下载地址:http://download.oracle.com/otn-pub/java/jdk/8u112-b15/jdk-8u112-windows-x64.exe 下载完成后,全部默认安装,一直点击下一步知道完成。在安装的过程中

tongyong128的专栏 8万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

8.安卓逆向-安卓开发基础-安卓四大组件1

安卓逆向 安卓协议分析 app协议分析 保姆级攻略 app逆向 Android apk逆向

计算机王的博客 1655

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【安卓四大组件--android app】

Android四大核心组件包括Activity、Service、BroadcastReceiver和ContentProvider。Activity负责界面展示,具有完整的生命周期(onCreate-onDestroy);Service用于后台任务,支持startService和bindService两种启动方式;BroadcastReceiver接收系统或应用广播,通过onReceive响应;ContentProvider实现跨应用数据共享。各组件通过Intent通信,配合生命周期管理实现不同功能场景。

xx 1402

Android中的四大组件详解

Android中的四大组件详解 我们都知道Android系统应用层框架中,为开发者提供了四大组件来便于应用的开发,它们是Activity、Service、BroadcastReceiver、ContentProvider。 它们用于在应用开发过程中,不同场景的功能实现。 Activity:Activity是开发中最常用的,也是最复杂的一个组件。它是用户可以专注做一些事情的东西。它的主要功能就是可以和用户进行交互操作,所以几乎所有的Activity都会负责创建一个显示窗口,然后通过setContentView

joye123的博客 7561

基于安卓android studio 的 菜谱食谱APP设计

一 项目概述 菜谱APP或者食谱APP 是基于安卓开发的一个APP,项目包含前台安卓端和后台管理系统,前台安卓端可以进行 查看推荐菜谱,菜谱搜索,收藏菜品 ,菜品排行榜,菜品详情,个人中心,基本信息,登录,注册等功能,后台管理系统主要维护菜品,维护前台注册的用户。东西非常多。 二 项目开发工具和技术 开发工具使用android studio 后台服务开发 idea或者eclipse 模拟器:逍遥 夜神或者雷电模拟器 三 项目功能结构图 四 项目开发实现 菜谱首页效果: 首页包含顶部导航,菜品分类 ,

coder1998的博客 3万+

你给需求文档,AI就能帮你开发安卓App

丰色 发自 凹非寺量子位 报道 | 公众号 QbitAI用自然语言生成代码不算稀奇,但现在,这项技术涉及的业务范围真是越来越广了。就有一个叫做Text2App的“AI”,你“喂”给它一串文...

量子位 5954

App端框架之谜---Android四大组件系统系列

本文采用自述的方式介绍了App端框架是啥,它是如何帮助App进程启动的,以及它是如何帮助Activity启动的。

niurenwo的专栏 1084

Android四大组件详解

Android四大组件详解 文章目录Android四大组件详解四大组件的不同点一、Activity二、Service三、Broadcast Receiver四、Content Provider四大组件相同点4大组件的注册4大组件的激活4大组件的关闭android中的任务(activity栈) Android四大组件分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。 活动(activity)是所有A

爱笑的博客 1万+

安卓APP开发基础

目录安卓工程构建和第一APP运行 安卓工程构建和第一APP运行 嵌入式学习安卓目的其实是为了掌握简单的安卓APP开发,最重要的目的并不是为了开发APP,而是为了了解APP开发的整个过程,方便为安卓开发工程师提供SDK包,也就是如何在手机APP上实现点灯等控制硬件的一系列操作。 ...

zhuguanlin121的博客 1849

安卓系统APP开发简介

2.1 安卓系统的概念安卓系统性能。现今的安卓系统自身有蓝牙、无线网的连接性能,摄影、拍照等相关的功能,并且具备有数据信息的传输与下载功能,对应的软件能够直接进行对应的安装、虚拟键盘转变等对应的性能,远程打印、指纹支付体系等相关先进技术的加入。安卓是现如今使用最多也是范围最广的一个操作系统,其自身有一定的开放性质以及性能完备的特征,让当下的安卓系统配适的智能手机越来越多,不仅如此更是带动了安卓体系自身的深入进步与发展。安卓系统的架构。

hukejishu的博客 1730

【安卓App】安卓App开发基础指南

Android 应用开发是一个系统性的过程,涉及多个关键概念和技术。

Flask Web 941
上一篇: python爬虫学习——安装selenium(测试网站的自动化测试工具)
下一篇: Python-bs4库,find_all 函数处理css样式问题
for-nothing
博客等级 码龄6年 29粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

for-nothing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值