当前位置: 编程技术>移动开发
本页文章导读:
▪Content Provider(以上简称为CP)的加载 Content Provider(以下简称为CP)的加载
在实际开发中,CP有以下两种用法:1)和应用在一个APK包里这种情况下和应用在同一进程中。process name和uid都一样。2)单独在一个APK包里。这种情况.........
▪ 获取下网IP 获取上网IP
这两天在做一个根据IP地址来定位城市的功能。两个方案:1.自己解析纯真IP库,2.用网上现成的IP查询接口获取IP。这两个方案都做了,但是觉得第一个方案实在是太操蛋了.........
▪ 解决listview设置背景图片以后,拖动出现黑色的有关问题 解决listview设置背景图片以后,拖动出现黑色的问题。
android接受的颜色: #RGB, #ARGB, #RRGGBB, #AARRGGBB
注意每种写法对应的位数不同。
解决listview设置背景图片以后,拖动出现黑色的问题。
To .........
[1]Content Provider(以上简称为CP)的加载
来源: 互联网 发布时间: 2014-02-18
Content Provider(以下简称为CP)的加载
在实际开发中,CP有以下两种用法:
1)和应用在一个APK包里
这种情况下和应用在同一进程中。process name和uid都一样。
2)单独在一个APK包里。
这种情况下,如果在AndroidManifest.xml文件里声明了和某个进程同属一个进程,如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.providers.telephony"
android:sharedUserId="android.uid.phone"
>
<application android:process="com.android.phone"
android:allowClearUserData="false"
android:label="Dialer Storage"
android:icon="@drawable/ic_launcher_phone">
<provider android:name="TelephonyProvider"
android:authorities="telephony"
android:multiprocess="true" />
这个里面通过android:sharedUserId="android.uid.phone"和android:process="com.android.phone"声明了该CP是和phone进程同属一个进程,拥有同样的process name和uid.
如果没有上述声明,那么该CP是在独立的进程中,拥有属于自己的process name和uid.
以上两种用法可以总结为:
1)CP和某个进程同属一个进程
这种情况下,当该进程启动时,会搜索属于该进程的所有CP,并加载。
2)CP属于独立的一个进程。
这种情况下,只有需要用到该CP时,才会去加载。
那么,当一个进程想要操作一个CP时,先需要获取该CP的对象,系统是如何处理呢:
1)如果该CP属于当前主叫进程,因为在进程启动时就已经加载过了,所以系统会直接返回该CP的对象。
2)如果该CP不属于当前主叫进程,那么系统会进行相关处理(由ActivityManagerService进行,以下简称为AMS):
所有已加载的CP信息都已保存在AMS中。当需要获取某个CP的对象时,AMS会先判断该CP是否已被加载
----如果已被加载,该CP和当前主叫进程不属一个进程,但是该CP设置了multiprocess的属性(如上例中的 android:multiprocess="true"),并且该CP属于系统级CP,那么就在当前主叫进程内部新生成该CP的对象。否则就需要通过 IPC机制进行调用。
----如果还未被加载,该CP和当前主叫进程不属一个进程,但是该CP设置了multiprocess的属性(如上例中的 android:multiprocess="true"),并且该CP属于系统级CP,那么就在当前主叫进程内部新生成该CP的对象。否则就需要先创建该CP所在的进程,然后再通过IPC机制进行调用。
在实际开发中,CP有以下两种用法:
1)和应用在一个APK包里
这种情况下和应用在同一进程中。process name和uid都一样。
2)单独在一个APK包里。
这种情况下,如果在AndroidManifest.xml文件里声明了和某个进程同属一个进程,如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.providers.telephony"
android:sharedUserId="android.uid.phone"
>
<application android:process="com.android.phone"
android:allowClearUserData="false"
android:label="Dialer Storage"
android:icon="@drawable/ic_launcher_phone">
<provider android:name="TelephonyProvider"
android:authorities="telephony"
android:multiprocess="true" />
这个里面通过android:sharedUserId="android.uid.phone"和android:process="com.android.phone"声明了该CP是和phone进程同属一个进程,拥有同样的process name和uid.
如果没有上述声明,那么该CP是在独立的进程中,拥有属于自己的process name和uid.
以上两种用法可以总结为:
1)CP和某个进程同属一个进程
这种情况下,当该进程启动时,会搜索属于该进程的所有CP,并加载。
2)CP属于独立的一个进程。
这种情况下,只有需要用到该CP时,才会去加载。
那么,当一个进程想要操作一个CP时,先需要获取该CP的对象,系统是如何处理呢:
1)如果该CP属于当前主叫进程,因为在进程启动时就已经加载过了,所以系统会直接返回该CP的对象。
2)如果该CP不属于当前主叫进程,那么系统会进行相关处理(由ActivityManagerService进行,以下简称为AMS):
所有已加载的CP信息都已保存在AMS中。当需要获取某个CP的对象时,AMS会先判断该CP是否已被加载
----如果已被加载,该CP和当前主叫进程不属一个进程,但是该CP设置了multiprocess的属性(如上例中的 android:multiprocess="true"),并且该CP属于系统级CP,那么就在当前主叫进程内部新生成该CP的对象。否则就需要通过 IPC机制进行调用。
----如果还未被加载,该CP和当前主叫进程不属一个进程,但是该CP设置了multiprocess的属性(如上例中的 android:multiprocess="true"),并且该CP属于系统级CP,那么就在当前主叫进程内部新生成该CP的对象。否则就需要先创建该CP所在的进程,然后再通过IPC机制进行调用。
[2] 获取下网IP
来源: 互联网 发布时间: 2014-02-18
获取上网IP
这两天在做一个根据IP地址来定位城市的功能。两个方案:1.自己解析纯真IP库,2.用网上现成的IP查询接口获取IP。这两个方案都做了,但是觉得第一个方案实在是太操蛋了,qqwry.dat文件就8M,再加上我的程序,这个文件就太大了,装好就有7M左右,实在是恐怖。所以就执行了第二个方案。移动互联网嘛,不互联怎么和世界沟通??呵呵……接下来的问题就来了,我怎么获取我自己的IP呢?
网上有这个方法:
想了一下午,最后我用了一个比较无耻的方法:上网,去获得自己的IP,再把这个IP抓出来。^_^……下面是方法,很简单:
方法虽然笨,但是问题解决了,蛋痛了一下午……如果有那位大牛知道其他方法,希望告知,我很想知道怎么直接获取,我这个方法是真的很无奈的方法。
这两天在做一个根据IP地址来定位城市的功能。两个方案:1.自己解析纯真IP库,2.用网上现成的IP查询接口获取IP。这两个方案都做了,但是觉得第一个方案实在是太操蛋了,qqwry.dat文件就8M,再加上我的程序,这个文件就太大了,装好就有7M左右,实在是恐怖。所以就执行了第二个方案。移动互联网嘛,不互联怎么和世界沟通??呵呵……接下来的问题就来了,我怎么获取我自己的IP呢?
网上有这个方法:
public String getLocalIpAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); } } } } catch (SocketException ex) { Log.e(LOG_TAG, ex.toString()); } return null; }这个方法的确是可以获得IP,但是这个IP大多数获得是局域网的IP。杯具了……只要使用SIM卡上网,绝对获得的是局域网的IP,想根据IP定位不肯能啊~~~
想了一下午,最后我用了一个比较无耻的方法:上网,去获得自己的IP,再把这个IP抓出来。^_^……下面是方法,很简单:
public class IPNetUtils { private static final String IP_URL = "http://www.ip138.com/ip2city.asp"; private static final String CHARTSET = "UTF-8"; /** * 获得IP * * @return */ public static String getIPInfo() { URL urlInUse = null; URLConnection conn = null; ArrayList<String> list = new ArrayList<String>(); String temp = ""; try { urlInUse = new URL(/blog_article/IP_URL/index.html); conn = urlInUse.openConnection(); InputStream in = conn.getInputStream(); BufferedReader bf = new BufferedReader(new InputStreamReader(in,CHARTSET)); String line = ""; while ((line = bf.readLine()) != null) { list.add(line.trim()); } if (list != null) { temp = list.get(5); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return getIP(temp); } /** * 截取IP * * @param str * @return */ private static String getIP(String str) { return str.substring(str.indexOf('[') + 1, str.indexOf(']')); } }
方法虽然笨,但是问题解决了,蛋痛了一下午……如果有那位大牛知道其他方法,希望告知,我很想知道怎么直接获取,我这个方法是真的很无奈的方法。
[3] 解决listview设置背景图片以后,拖动出现黑色的有关问题
来源: 互联网 发布时间: 2014-02-18
解决listview设置背景图片以后,拖动出现黑色的问题。
android接受的颜色: #RGB, #ARGB, #RRGGBB, #AARRGGBB
注意每种写法对应的位数不同。
解决listview设置背景图片以后,拖动出现黑色的问题。
To fix this issue, all you have to do is either disable the cache color hint optimization, if you use a non-solid color background, or set the hint to the appropriate solid color value. You can do this from code (see setCacheColorHint(int)) or preferably from XML, by using the android:cacheColorHint attribute. To disable the optimization, simply use the transparent color #00000000. The following screenshot shows a list with android:cacheColorHint="#00000000" set in the XML layout file:
这里的#00000000 应该是#AARRGGBB写法。
最新技术文章: