intent

Android深入四大组件(四)Android8.0 根Activity启动过程(前篇)

自古美人都是妖i 提交于 2020-01-04 05:21:37
前言 在几个月前我写了 Android深入四大组件(一)应用程序启动过程(前篇) 和 Android深入四大组件(一)应用程序启动过程(后篇) 这两篇文章,它们都是基于Android 7.0,当我开始阅读Android 8.0源码时发现应用程序(根Activity)启动过程照Android 7.0有了一些变化,因此又写下了本篇文章,本篇文章照此前的文章不仅流程发生变化,而且增加了一些分析,算是升级版本。由于篇幅较长,Android8.0 根Activity启动过程仍旧分为前篇和后篇来进行讲解。 1.概述 Activity的启动过程分为两种,一种是根Activity的启动过程,另一种是普通Activity的启动过程,根Activity指的是应用程序启动的第一个Activity,因此根Activity的启动过程一般情况下也可以理解为应用程序的启动过程。普通Activity指的是除了应用程序启动的第一个Activity之外的其他的Activity。这里介绍的是根Activity的启动过程,它和普通Activity的启动过程是有重叠部分的,只不过根Activity的启动过程一般情况下指的就是应用程序的启动过程,更具有指导性意义。想要了解普通Activity的启动过程的的同学可以参考根Activity的启动过程去自行阅读源码。 根Activity的启动过程比较复杂,因此这里分为三个部分来讲

Android10填坑适配指南

断了今生、忘了曾经 提交于 2020-01-03 10:08:43
Android10填坑适配指南,实际经验代码,拒绝翻译 Android10填坑适配指南,包含实际经验代码,绝不照搬翻译文档 1.Region.Op相关异常 :java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed 当 targetSdkVersion >= Build.VERSION_CODES.P 时调用 canvas.clipPath(path, Region.Op.XXX ); 引起的异常,参考源码如下: @Deprecated public boolean clipPath(@NonNull Path path, @NonNull Region.Op op) { checkValidClipOp(op); return nClipPath(mNativeCanvasWrapper, path.readOnlyNI(), op.nativeInt); } private static void checkValidClipOp(@NonNull Region.Op op) { if (sCompatiblityVersion >= Build.VERSION_CODES.P && op != Region.Op.INTERSECT &&

android之无返回结果跳转intent

本秂侑毒 提交于 2020-01-03 08:33:56
android之无返回结果跳转intent: (注意跳转的时候要传像user的对象必须实现Serializable接口) 登陆页面布局: layout/activity_login.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TableLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:stretchColumns="1" > <TableRow > <TextView android:text="输入编号:"/> <EditText android:id="@+id/etUser" android:hint="请输入1-10个字符"/> </TableRow> <TableRow > <TextView android:text="密码:"/>

Android跨进程通信篇

女生的网名这么多〃 提交于 2020-01-03 05:17:12
前言 转载请声明,转自【https://www.cnblogs.com/andy-songwei/p/10256379.html】,谢谢! 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一。Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Android开发高级工程师必须要跨过的一道坎。但是,我们是否真的清楚,Android中都有哪些方式实现跨进程通信呢?这些方式都有哪些优缺点?如何选择这些通信方式?Binder是什么?为什么要引入Binder?Binder是这么样实现跨进程通信的?AIDL是什么?AIDL和Binder又有什么关系呢?...... 本文将对Android的跨进程通、进程内通信等方面做一些总结,以及比较详细地介绍AIDL的使用,主要内容如下: 其行文脉络大致如下,希望能加深读者对这方面内容的记忆:(1)Android基于Linux系统,所以先说系统进程相关知识和Linux IPC。(2)总结Android的IPC,顺带总结了Android进程内组件之间的通信方式。(3)Android为了克服Linux IPC中的缺点,引入了Binder,所以对Binder做了一些宏观上的介绍。(4)AIDL是实现Binder最常用的工具,所以详细介绍了AIDL相关内容。 一、基础知识简介

android通过BroadcastReceiver拦截短信转发

走远了吗. 提交于 2020-01-02 15:34:17
通过BroadcastReceiver拦截短信转发,技术讨论 大家不要做坏事哦 先看布局: View Code 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:orientation="vertical" > 6 7 <EditText 8 android:id="@+id/sendToId" 9 android:layout_width="fill_parent"10 android:layout_height="wrap_content"11 android:paddingLeft="5dp"12 android:layout_marginLeft="10dp"13 android:layout_marginRight="10dp"14 android:layout_marginTop="5dp"15 android:inputType="phone"16 android:hint="填写需要转发到的号码"17 />18

下拉通知notifacation练习

混江龙づ霸主 提交于 2020-01-02 08:28:23
下拉通知notifacation练习 案例: 点击之后弹出详情 编写布局文件,一个进入的页面,一个下拉之后点进去的页面。添加一个ImageView即可 创建detail界面就是点击详情之后显示的界面,这个里面代码基本上不用编写 在MainActivity中编写通知 项目目录: detail: package com . example . acer . wechattab ; import androidx . appcompat . app . AppCompatActivity ; import android . os . Bundle ; public class detail extends AppCompatActivity { @Override protected void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ) ; setContentView ( R . layout . activity_detail ) ; } } MainActivity: 创建一个通知对象 设置通知打开后,自动消失 设置通知图标 设置通知内容的标题 设置通知内容 设置发送时间 设置声音和震动 创建一个启动详细页面的Intent 创建pending intent

AndroidManifest.xml文件综合详解

喜欢而已 提交于 2020-01-01 02:53:07
一,重要性 AndroidManifest.xml是Android应用程序中最重要的文件之一。它是Android程序的全局配置文件,是每个android程序中必须的文件。它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件(activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息。 因此,该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所必须拥有的信息。一个典型的Android应用程序的结构如下图所示: 二,主要功能 它指定了该应用程序的Java包:该包名作为应用程序的一个独特标识。 它描述了应用程序组件:该应用程序由哪些activity,service,broadcast receiver和content provider组成。它指定了实现每个组件的类以及公开发布它们的能力(例如,它们能持有哪个Intent信息)。这些声明使Android系统知道这儿有什么组件以及在什么条件下它们可以被载入。 它决定那些进程将容纳应用程序组件。 它声明了本应用程序必须拥有哪些许可,以便访问API的被保护部分,以及与其他应用程序交互。 它也声明了其他应用程序在和该应用程序交互时需要持有的许可。 它列出了Instrumentation类

多线程(四)、Android多线程使用及AsyncTask源码分析

半城伤御伤魂 提交于 2020-01-01 00:59:19
本篇是多线程系列的第四篇,如果对前三篇感兴趣的也可以去看看。 多线程(一)、基础概念及notify()和wait()的使用 多线程(二)、内置锁 synchronized 多线程(三)、线程池 ThreadPoolExecutor 知识点总结 除了前面的线程池的使用外,在Android中,我们除了通过 Thread 创建线程外,还可以通过 AsyncTask 、 IntentService 、 HandleThread 来创建,线程池前面一篇已经详细介绍了,下面对其他几个方法简单的介绍。 1.1、HandleThread 1.1.1、源码 public class HandlerThread extends Thread { int mPriority; int mTid = - 1 ; Looper mLooper; public HandlerThread (String name) { super (name); mPriority = Process.THREAD_PRIORITY_DEFAULT; } public HandlerThread (String name, int priority) { super (name); mPriority = priority; } protected void onLooperPrepared () { } @Override

转载——Activity启动模式 及 Intent Flags 与 栈 的关联分析

你离开我真会死。 提交于 2019-12-31 23:15:10
转载地址: https://blog.csdn.net/vipzjyno1/article/details/25463457 在学习Android的过程中,Intent是我们最常用Android用于进程内或进程间通信的机制,其底层的通信是以Binder机制实现的,在物理层则是通过共享内存的方式实现的。 Intent主要用于2种情景下:(1)发起意图 (2)广播 它的属性有:ComponentName,action,data,category,extras,flags等,通常情况下,进行Intent的匹配涉及到3个属性:Action,Data,Category。这些东西都需要了解才能对它有个深入的体会。 下面我就根据近期学习,总结记录下Activity启动模式 及 Intent Flags 与 栈 的关联分析。 文章结构: 1.什么是栈 2.Activity栈 3.Task 4.Activity启动模式 5.Activity栈和Task联系 6.Intent Flags 7.Activity相关属性taskAffinity 1.什么是栈 栈 栈是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西,而对于栈就只能每次访问它的栈顶元素,从而可以达到保护栈顶元素以下的其他元素.”先进后出”或”后进先出”就是栈的一大特点

android 蓝牙操作

99封情书 提交于 2019-12-31 19:25:10
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); if(adapter != null) { if(adapter.isEnabled() { Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivity(intent); } set<BluetoothDevice>devices = adapter.getBondedDevices(); if(devices.size()>0) { for(Iterator iterator = devices.iterator();iterator.hasNext();) { BluetoothDevices bluetoothDevice =(BluetoothDevice)iterator.next(); } } } 来源: https://www.cnblogs.com/andriod-html5/archive/2011/11/01/2539250.html