IntentFilter

2023-05-16

当Intent在组件间传递时,组件如果想告知Android系统自己能够响应和处理哪些Intent,那么就需要用到IntentFilter对象。

    顾名思义,IntentFilter对象负责过滤掉组件无法响应和处理的Intent,只将自己关心的Intent接收进来进行处理。 IntentFilter实行“白名单”管理,即只列出组件乐意接受的Intent,但IntentFilter只会过滤隐式Intent,显式的Intent会直接传送到目标组件。 Android组件可以有一个或多个IntentFilter,每个IntentFilter之间相互独立,只需要其中一个验证通过则可。除了用于过滤广播的IntentFilter可以在代码中创建外其他的IntentFilter必须在AndroidManifest.xml文件中进行声明。

    IntentFilter中具有和Intent对应的用于过滤ActionDataCategory的字段,一个隐式Intent要想被一个组件处理,必须通过这三个环节的检查。

       

       一:检查 Action 尽管一个Intent只可以设置一个Action,但一个Intentfilter可以持有一个或多个Action用于过滤,到达的Intent只需要匹配其中一个Action即可。 深入思考:如果一个Intentfilter没有设置Action的值,那么,任何一个Intent都不会被通过;反之,如果一个Intent对象没有设置Action值,那么它能通过所有的Intentfilter的Action检查。

        

       二:检查 Data 同Action一样,Intentfilter中的Data部分也可以是一个或者多个,而且可以没有。每个Data包含的内容为URL和数据类型,进行Data检查时主要也是对这两点进行比较,比较规则: 如果一个Intent对象没有设置Data,只有Intentfilter也没有设置Data时才可通过检查。 如果一个Intent对象包含URI,但不包含数据类型:仅当Intentfilter也不指定数据类型,同时它们的URI匹配,才能通过检测。 如果一个Intent对象包含数据类型,但不包含URI:仅当Intentfilter也没指定URL,而只包含数据类型且与Intent相同,才通过检测。 如果一个Intent对象既包含URI,也包含数据类型(或数据类型能够从URI推断出),只有当其数据类型匹配Intentfilter中的数据类型,并且通过了URL检查时,该Intent对象才能通过检查。

   其中URL由四部分组成它有四个属性scheme、host、port、path对应于URI的每个部分。

       例如:content://com.wjr.example1:121/files

       scheme部分:content

       host部分:com.wjr.example1

       port部分:121

       path部分:files

    host和port部分一起构成URI的凭据(authority),如果host没有指定,那port也会被忽略。

    这四个属性是可选的,但他们之间并不是完全独立的。要让authority有意义,scheme必须要指定。要让path有意思,scheme和authority必须指定。 Intentfilter中的path可以使用通配符来匹配path字段,Intent和Intentfilter都可以用通配符来指定MIME类型。

    

     三:检查 Category Intentfilter中可以设置多个Category,Intent中也可以含有多个Category,只有Intent中的所有Category都能匹配到Intentfilter中的Category,Intent才能通过检查。也就是说,如果Intent中的Category集合是Intentfilter中Category的集合的子集时,Intent才能通过检查。如果Intent中没有设置Category,则它能通过所有Intentfilter的Category检查。 如果一个Intent能够通过不止一个组件的Intentfilter,用户可能会被问那个组件被激活。如果没有目标找到,会产生一个异常。

 

 

 

IntentFilter

应用程序的组件为了告诉Android自己能响应、处理哪些隐式Intent请求,可以声明一个甚至多个IntentFilter。每个 IntentFilter描述该组件所能响应Intent请求的能力——组件希望接收什么类型的请求行为,什么类型的请求数据。比如之前请求网页浏览器这 个例子中,网页浏览器程序的IntentFilter就应该声明它所希望接收的Intent Action是WEB_SEARCH_ACTION,以及与之相关的请求数据是网页地址URI格式。

如何为组件声明自己的IntentFilter? 常见的方法是在AndroidManifest.xml文件中用属性<Intent-Filter>描述组件的IntentFilter。

前面我们提到,隐式Intent和IntentFilter进行比较时的三要素是Intent的Action、Data以及Category。实际 上,一个隐式Intent请求要能够传递给目标组件,必要通过这三个方面的检查。如果任何一方面不匹配,Android都不会将该隐式Intent传递给 目标组件。接下来我们讲解这三方面检查的具体规则。

1.动作测试

<intent-filter>元素中可以包括子元素<action>,比如:


 
 
  1. <intent-filter> 
  2. <action android:name="com.example.project.SHOW_CURRENT" /> 
  3. <action android:name="com.example.project.SHOW_RECENT" /> 
  4. <action android:name="com.example.project.SHOW_PENDING" /> 
  5. </intent-filter> 

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

如果Intent请求的Action和<intent-filter>中个某一条<action>匹配,那么该Intent就通
过了这条<intent-filter>的动作测试。

如果Intent请求或<intent-filter>中没有说明具体的Action类型,那么会出现下面两种情况。

(1) 如果<intent-filter>中没有包含任何Action类型,那么无论什么Intent请求都无法和这条<intent-filter>匹配。

(2) 反之,如果Intent请求中没有设定Action类型,那么只要<intent-filter>中包含有Action类型,这个Intent请求就将顺利地通过<intent-filter>的行为测试。

2.类别测试

<intent-filter>元素可以包含<category>子元素,比如:


 
 
  1. <intent-filter . . . > 
  2. <category android:name="android.Intent.Category.DEFAULT" /> 
  3. <category android:name="android.Intent.Category.BROWSABLE" /> 
  4. </intent-filter> 

只有当Intent请求中所有的Category与组件中某一个IntentFilter 的<category>完全匹配时,才会让该Intent请求通过测试,IntentFilter中多余的<category> 声明并不会导致匹配失败。一个没有指定任何类别测试的IntentFilter仅仅只会匹配没有设置类别的Intent请求。

3.数据测试

数据在<intent-filter>中的描述如下:


 
 
  1. <intent-filter . . . > 
  2. <data android:type="video/mpeg" android:scheme="http" . . . /> 
  3. <data android:type="audio/mpeg" android:scheme="http" . . . /> 
  4. </intent-filter> 

<data>元素指定了希望接受的Intent请求的数据URI和数据类 型,URI被分成三部分来进行匹配:scheme、authority和path。其中,用setData()设定的Intent请求的URI数据类型和 scheme必须与IntentFilter中所指定的一致。若IntentFilter中还指定了authority或path,它们也需要相匹配才会 通过测试。

讲解完Intent基本概念之后,接下来我们就使用Intent激活Android自带的电话拨号程序。通过这个实例你会发现,使用Intent并不像其概念描述得那样难。

 

IntentFilter 
简述:结构化描述intent匹配的信息。包含:action,categories and data(via type,scheme ,path),还有priority, to order multiple matching filters.
       IntentFilter 中如果action为空,则视为通配符,如果type为空,则intent必须不设type,否则匹配不上。 
       data被分为3个属性:type,scheme,authority/path 任何设置的属性intent必须匹配上。 
                           设置了scheme 而没设type,则intent也必须类似,不能设置type,也不能是content: URI.
                           设置了type而没设scheme:将匹配上没有URI的intent,或者content:,file:的uri。
                           设置了authority:必须指定一个或多个相关联的schemes 
                           设置了path:唏嘘指定一个或多个相关联的schemes 
       匹配规则: 
           IntentFilter 匹配Intent的上的条件: 
           Action : 值相同 ,或则IntentFilter未指定action. 
           DataType:. 系统通过调用Intent.resolve(ContentResolver)获取type,通配符* 
                     在Intent/IntentFilter的MIME type中使用,区分大小写 
           DataScheme:系统通过调用Intent. getData() and Uri.getScheme())获取scheme, 区分大小写
           DataAuthority:必须有一个dataScheme匹配上且authority值匹配上,或者IntentFilter没有定义。Intent. getData() and Uri.getAuthority()获取authority.
           DataPath: scheme and authority必须先匹配上 ntent. getData() and Uri.getPath(),获取. 或者IntentFilter没有定义
           Categories:all of the categories in the Intent match categories given in the filter 多余的Categorie,不影响intent匹配,如果IntentFilter
                  没有指定Categorie,则只能匹配上没有Categorie的intent。 

常用intent列表: 
Android Intent 用法汇总 
显示网页 
- <activity android:name="BrowserActivity" android:label="Browser" android:launchMode="singleTask" android:alwaysRetainTaskState="true" android:configChanges="orientation|keyboardHidden" android:theme="@style/BrowserTheme">
- <!-- 
For these schemes were not particular MIME type has been 
                 supplied, we are a good candidate. 
  --> 
- <intent-filter> 
  <action android:name="android.intent.action.VIEW" /> 
  <category android:name="android.intent.category.DEFAULT" /> 
  <category android:name="android.intent.category.BROWSABLE" /> 
  <data android:scheme="http" /> 
  <data android:scheme="https" /> 
  <data android:scheme="about" /> 
  </intent-filter> 
- <!-- 
  For these schemes where any of these particular MIME types 
                  have been supplied, we are a good candidate. 
  --> 
- <intent-filter> 
  <action android:name="android.intent.action.VIEW" /> 
  <category android:name="android.intent.category.BROWSABLE" /> 
  <category android:name="android.intent.category.DEFAULT" /> 
  <data android:scheme="http" /> 
  <data android:scheme="https" /> 
  <data android:mimeType="text/html" /> 
  <data android:mimeType="text/plain" /> 
  <data android:mimeType="application/xhtml+xml" /> 
  <data android:mimeType="application/vnd.wap.xhtml+xml" /> 
  </intent-filter> 
- <!-- 
We are also the main entry point of the browser. 
  --> 
- <intent-filter> 
  <action android:name="android.intent.action.MAIN" /> 
  <category android:name="android.intent.category.DEFAULT" /> 
  <category android:name="android.intent.category.LAUNCHER" /> 
  <category android:name="android.intent.category.BROWSABLE" /> 
  </intent-filter> 
- <intent-filter> 
  <action android:name="android.intent.action.WEB_SEARCH" /> 
  <category android:name="android.intent.category.DEFAULT" /> 
  <category android:name="android.intent.category.BROWSABLE" /> 
  <data android:scheme="" /> 
  <data android:scheme="http" /> 
  <data android:scheme="https" /> 
  </intent-filter> 
- <intent-filter> 
  <action android:name="android.intent.action.WEB_SEARCH" /> 
  <action android:name="android.intent.action.MEDIA_SEARCH" /> 
  <category android:name="android.intent.category.DEFAULT" /> 
  </intent-filter> 
- <intent-filter> 
  <action android:name="android.intent.action.SEARCH" /> 
  <category android:name="android.intent.category.DEFAULT" /> 
  </intent-filter> 
  <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
- <intent-filter> 
  <action android:name="android.net.http.NETWORK_STATE" /> 
  <action android:name="android.intent.action.PROXY_CHANGE" /> 
  </intent-filter> 
  </activity> 

1. Uri uri = Uri.parse("http://google.com");   
   2. Intent it = new Intent(Intent.ACTION_VIEW, uri);   
   3. startActivity(it);  

显示地图 

   1. Uri uri = Uri.parse("geo:38.899533,-77.036476");   
   2. Intent it = new Intent(Intent.ACTION_VIEW, uri);    
   3. startActivity(it);    
   4. //其他 geo URI 範例   
   5. //geo:latitude,longitude   
   6. //geo:latitude,longitude?z=zoom   
   7. //geo:0,0?q=my+street+address   
   8. //geo:0,0?q=business+near+city   
   9. //google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom  



路径规划 

   1. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");  
   2. Intent it = new Intent(Intent.ACTION_VIEW, uri);   
   3. startActivity(it);   
   4. //where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456  


打电话 
   1. //叫出拨号程序  
   2. Uri uri = Uri.parse("tel:0800000123");   
   3. Intent it = new Intent(Intent.ACTION_DIAL, uri);   
   4. startActivity(it);   

   1. //直接打电话出去   
   2. Uri uri = Uri.parse("tel:0800000123");   
   3. Intent it = new Intent(Intent.ACTION_CALL, uri);   
   4. startActivity(it);   
   5. //用這個,要在 AndroidManifest.xml 中,加上   
   6. //<uses-permission id="android.permission.CALL_PHONE" />   

传送SMS/MMS 
   1. //调用短信程序  
   2. Intent it = new Intent(Intent.ACTION_VIEW, uri);   
   3. it.putExtra("sms_body", "The SMS text");    
   4. it.setType("vnd.android-dir/mms-sms");   
   5. startActivity(it);  

   1. //传送消息  
   2. Uri uri = Uri.parse("smsto://0800000123");   
   3. Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
   4. it.putExtra("sms_body", "The SMS text");   
   5. startActivity(it);  

   1. //传送 MMS   
   2. Uri uri = Uri.parse("content://media/external/images/media/23");   
   3. Intent it = new Intent(Intent.ACTION_SEND);    
   4. it.putExtra("sms_body", "some text");    
   5. it.putExtra(Intent.EXTRA_STREAM, uri);   
   6. it.setType("image/png");    
   7. startActivity(it);   

传送 Email 
   1. Uri uri = Uri.parse("mailto:xxx@abc.com");   
   2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
   3. startActivity(it);   

   1. Intent it = new Intent(Intent.ACTION_SEND);   
   2. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");   
   3. it.putExtra(Intent.EXTRA_TEXT, "The email body text");   
   4. it.setType("text/plain");   
   5. startActivity(Intent.createChooser(it, "Choose Email Client"));   

   1. Intent it=new Intent(Intent.ACTION_SEND);     
   2. String[] tos={"me@abc.com"};     
   3. String[] ccs={"you@abc.com"};     
   4. it.putExtra(Intent.EXTRA_EMAIL, tos);     
   5. it.putExtra(Intent.EXTRA_CC, ccs);     
   6. it.putExtra(Intent.EXTRA_TEXT, "The email body text");     
   7. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");     
   8. it.setType("message/rfc822");     
   9. startActivity(Intent.createChooser(it, "Choose Email Client"));  

   1. //传送附件 
   2. Intent it = new Intent(Intent.ACTION_SEND);   
   3. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");   
   4. it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");   
   5. sendIntent.setType("audio/mp3");   
   6. startActivity(Intent.createChooser(it, "Choose Email Client"));  

播放多媒体 
       Uri uri = Uri.parse("file:///sdcard/song.mp3");   
       Intent it = new Intent(Intent.ACTION_VIEW, uri);   
       it.setType("audio/mp3");   
       startActivity(it);  



       Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");  
       Intent it = new Intent(Intent.ACTION_VIEW, uri);   

       startActivity(it);  



Market 相关 
1.        //寻找某个应用  
2.        Uri uri = Uri.parse("market://search?q=pname:pkg_name");  
3.        Intent it = new Intent(Intent.ACTION_VIEW, uri);   
4.        startActivity(it);   
5.        //where pkg_name is the full package path for an application  

1.        //显示某个应用的相关信息  
2.        Uri uri = Uri.parse("market://details?id=app_id");   
3.        Intent it = new Intent(Intent.ACTION_VIEW, uri);  
4.        startActivity(it);   
5.        //where app_id is the application ID, find the ID    
6.        //by clicking on your application on Market home    
7.        //page, and notice the ID from the address bar  


Uninstall 应用程序 
1.        Uri uri = Uri.fromParts("package", strPackageName, null);  
2.        Intent it = new Intent(Intent.ACTION_DELETE, uri);    
3.        startActivity(it);   

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IntentFilter 的相关文章

  • 扫描 NFC 标签后是否可以启动应用程序?

    我有一个 NFC 标签 我想编写一个 Android 应用程序 当用手机扫描 NFC 标签时 该应用程序会自动启动并从 NFC 获取数据 假设设备已打开 NFC 并且手机上没有运行其他应用程序 这应该可以工作 我发现一些应用程序可以启动另一
  • android:选择图库中的多个图像并启动隐式意图

    如何获取所有选定图像的图像路径或仅将它们显示在我的应用程序中 当用户在图库中选择图像并按共享按钮时 我可以启动隐式意图并将其显示在我的 imageView 中 如下所示 ImageView iv ImageView findViewById
  • Android 应用程序仅为一项活动启用 NFC

    对于支持 NFC 的应用程序 是否可以仅针对 Android 中的一项活动启用 NFC 我读过这个 仅从特定活动中读取 NFC 标签 但设备仍在扫描应用程序所有活动的标签 EDIT
  • 将 URL 中的 HTTP 参数与 Android Intent Filter 相匹配

    我正在尝试组合一个意图过滤器 以便在浏览器中访问某个 HTML URL 时启动我的应用程序 当它是标准网址 例如 www stonyx com 时 我这样做没有任何问题 但是 我需要将 URL 与 HTTP 参数 如 www stonyx
  • 使用 NDEF Android 应用程序记录 (AAR) 获取 NFC 标签

    我正在开发 NFC 应用程序 为了启动我的应用程序 我使用了 NDEF 标签 其中包含 AAR NDEF 记录 这很好用 但现在我想直接用应用程序读取标签内容 我怎样才能做到这一点 当我从手机上取下标签并再次触摸它时 它已经可以工作了 但我
  • 2 个意图过滤器,1 个活动 - 哪个打开了它?

    有没有办法知道哪个 Intent Filter 负责启动一个在 AndroidManifest xml 中定义了两个 Intent Filter 的 Activity 我想要一套稍微不同的逻辑 但还不足以需要一个全新的活动 Thanks 没
  • 如何从ACTION_SEND获取URL?

    我的应用程序正在注册接收 URL 的意图因此 当用户共享网址时 我的应用程序将出现在应用程序列表中
  • 无法启动服务意图

    我有一个服务班 我已将此类导出到 jar 并将该 jar 嵌入到我的客户端应用程序中 当需要时 我调用服务类 当我尝试这样做时 出现以下错误 Unable to start service Intent comp com sample se
  • android:单个文件的pathPattern

    我需要定义IntentFilter对于名为myfile ext 目前我的清单如下所示
  • Android应用程序更新问题

    最近我一直面临着我的Android应用程序更新过程的问题 简而言之 应用程序能够检查是否已将更高版本代码的更新上传到服务器上 如果是 用户决定是否更新 加载该应用程序并开始标准安装后 final Intent intent new Inte
  • 如何从android中的浏览器启动活动?

    如何从 Android 浏览器启动我的 Activity 我有一个链接说 http a b com http a b com 当用户在 Android 浏览器中输入该 URL 时 我需要打开活动 我的 Android 清单中有以下意图过滤器
  • 如何从intent中获取文件名?

    这是我的清单文件 使用意图过滤器后 我从邮件附件下载 ics 文件 当我打开下载的文件时 它会启动我的应用程序 我需要获取应用程序中所选文件的文件名和数据 我应该在清单和java文件中做什么 我对 Android 很陌生 有人可以帮助我吗
  • 从 URL 打开应用程序适用于 Android 版 Firefox,但不适用于 Google Chrome

    我想在用户点击我的网页链接 最好是来自 Facebook 共享帖子 但让我们从纯 URL 开始 时打开我的 Android 应用程序 为了实现这一目标 我创建了一个 ActivityUrlReceiver并将此代码添加到我的AndroidM
  • 尽管有预期方法声明,EasyMock“意外的方法调用”

    我的 EasyMock 的预期方法被认为是意外的 尽管我不使用严格的模拟 并且该方法在回复之前已经声明了 这行代码测试失败 Intent batteryIntent context getApplicationContext registe
  • 蓝牙、wifi 和铃声模式的广播意图

    以下事件中广播的意图是什么 WiFi状态改变 蓝牙状态改变 振铃模式更改 For 无线网络状态变化 WifiManager WIFI STATE CHANGED ACTION http developer android com refer
  • 从“选择应用程序”列表中隐藏 NFC 应用程序/禁用通过外部 NFC 意图启动

    我目前正在为 Android 编写几个支持 NFC 的应用程序 并想知道如何阻止我的应用程序出现在 选择应用程序 列表中 该列表在从启动器或非 NFC 应用程序扫描标签时打开 我只希望我的应用程序能够在打开时读取标签 我当前的意图过滤器
  • Android Studio - 应用程序未安装到手机上,但运行

    我使用 Android Studio 在手机上运行我的应用程序 它运行良好 但应用程序本身从未安装过 菜单中没有它的图标 每当我想测试我的应用程序时 我都必须 运行 我没有看到任何错误 我相信我的清单有问题 我在这里做错了什么
  • 上传失败您应该使用 http 和 https 作为您的 Web 意图过滤器的方案

    上传失败 您应该使用 http 和 https 作为您的 Web 意图过滤器的方案 我在将免安装应用上传到 Play 商店时收到此错误 我在清单中声明了 http 和 https 的意图过滤器 如下所示
  • 在浏览器中打开 URL,即使我的应用程序为其注册了意图过滤器

    我的应用程序为某些 URL 注册了一个意图过滤器 因为它可以处理来自这些 URL 的数据 但是 在应用程序内部 我想提供一个按钮来在浏览器中打开这样的 URL 也就是说 如果设置了默认浏览器 则在默认浏览器中打开它 否则提供一个选择器 就像
  • 意图过滤器到底是什么?

    我读过很多关于意图过滤器的文章 但我真的无法理解它们到底是做什么的 那么 如果有人可以用一个清晰 的例子向我解释意图过滤器的作用到底是什么 thanks 我认为这是有据可查的here http developer android com g

随机推荐

  • Redis源码-事件库

    网上看了很多Redis事件库的解读 xff0c 自己也研究了好几遍 xff0c 还是记录下来 xff0c 虽然水平有限 xff0c 但是进步总会是有的 网络事件库封装了Epoll的操作 xff08 当然是指Linux下的多路复用了 xff0
  • Redis源码分析-内存数据结构intset

    这次研究了一下intset xff0c 研究的过程中 xff0c 一度看不下过去 xff0c 但是还是咬牙挺过来了 xff0c 看懂了也就是那么回事 xff0c 静下心来 xff0c 切莫浮躁 Redis为了追求高效 xff0c 在存储下做
  • swift解析html

    最 近刚刚接触IOS开发 xff0c 在swift和OC之间纠结了很久 xff0c 不过对于一个java程序员来说 xff0c OC实在有些难以上手 xff0c 再看看swift xff0c 她就友好多了 xff0c 虽然现在大部分的App
  • 归并排序的迭代实现

    之前在另一篇文章中C 43 43 归并排序与快速排序详细分析了归并排序的递归实现 xff0c 但是会占用大量的时间和空间 xff0c 算法的效率低下 xff1b 使用迭代的方式代替递归的方式虽然比较难想 xff0c 但是会增大效率 如何写迭
  • java.lang.IllegalArgumentException异常解决

    在maven项目中测试代码的时候 xff0c 碰到java lang IllegalArgumentException 异常 xff1a 严重 Servlet service for servlet e3 manager in contex
  • Linux下的 command not found错误(解决方法)

    当我们在 Linux下执行一个命令时 xff0c 报 bash XXXX command not found xff0c 这和Windows是相同的道理 xff0c 都是环境变量惹的祸 xff0c 就是说你的 命令的 执行文件不在 usr
  • ubuntu18.04输入正确用户密码后黑屏并闪回登录界面解决方案

    过年离开实验室一会 xff0c 接了个向日葵远程控制 xff0c 连进来一不认识的 xff0c 然后工作站的cloudcompare打不开 xff0c 回来重启电脑之后开机一直循环登录界面 xff0c 没有办法进入任何一个用户的桌面 参考了
  • 小狼毫输入法的详细配置大全

    小狼毫输入法的详细配置大全 1 安装 在官网 https rime im download 下载并安装 这个路径有所有配置菜单的快捷方式 C ProgramData Microsoft Windows Start Menu Programs
  • 自我实现ArrayList

    面试者经常遇到集合类源码的问题 我们不求将所有的细节都记住 xff0c 但ArrayList与LinkedList比较 add get remove 扩容 及相关时间复杂度等核心思想要理解得一清二楚 ArrayList底层用数组实现 xff
  • 好博客要记录:JVM基础概念总结:数据类型、堆与栈、基本类型与引用类型

    JVM基础概念总结 xff1a 数据类型 堆与栈 基本类型与引用类型 Java虚拟机中 xff0c 数据类型可以分为两类 xff1a 基本类型和引用类型 基本类型的变量保存原始值 xff0c 即 xff1a 他代表的值就是数值本身 xff1
  • Future、FutureTask浅析

    Futurer多用于 耗时线程的计算 xff0c 主线程可以在完成自己的任务后 xff0c 再去查询该Future是否执行完毕并获取结果 他有一个回调函数protected void done xff0c 当任务结束时 xff0c 该回调函
  • 基于LinkedBlockingQueue源码自我实现阻塞队列

    LinkedBlockingQueue是一个阻塞的 线程安全的 由链表实现的双向队列 xff0c 和ArrayBlockingQueue一样 xff0c 是最普通也是最常用的阻塞队列 现基于LinkedBlockingQueue源码自我实现
  • AsyncTask原理详解

    在Android中 xff0c 异步执行是很重要的一块内容 xff0c 诸如网络请求 xff0c 大图片的加载 xff0c 等待等耗时操作都要在后台线程执行 xff0c 而这些操作又要通过UI线程来调用 xff0c 这样我们不得不需要通过异
  • LinearLayout和RelativeLayout的特殊属性

    Relativelayout属性 xff1a 属性名称描述android layout centerHorizontal水平居中android layout centerVertical垂直居中android layout centerIn
  • Activity launchmode和Intent flag详解

    学习安卓 xff0c 首先就要接触和学习Activity xff0c 想必大家在学习activity的过程中一定对activity的launchmode有过困惑 好在网络上关于activity launchmode的博客 解释一大堆 xff
  • 利用Canvas saveLayer手动绘制圆角View

    项目中包含了一个腾讯地图 xff0c 由于腾讯地图mapView不支持圆角背景 xff0c so决定自己画四个圆角view CornerView xff0c 覆盖在mapView上以实现圆角矩形的效果 要实现这样的效果 xff0c 需要重新
  • java内部类总结

    内部类是指在一个外部类的内部再定义一个类 类名不需要和文件夹相同 内部类可以是静态static的 xff0c 也可用public xff0c default xff0c protected和private修饰 xff08 而外部顶级类即类名
  • Linux服务器下Java环境配置-详细

    环境 xff1a Linux环境 具体步骤 xff1a 1 首先查看当前服务器环境是否已配置了JAVA 命令 xff1a java version 2 开始配置 通过官网下载JDK文件 xff0c 地址 xff1a https www or
  • 常用的Java文件操作

    span class hljs comment 1 创建文件夹 span span class hljs comment import java io span File myFolderPath 61 span class hljs bu
  • IntentFilter

    当Intent在组件间传递时 xff0c 组件如果想告知Android系统自己能够响应和处理哪些Intent xff0c 那么就需要用到IntentFilter对象 顾名思义 xff0c IntentFilter对象负责过滤掉组件无法响应和