如何用安卓手机查看某个安卓7.1关闭正在运行行的应用所使用的网址

Android 取得应用程序的启动次数和运行时间等信息
使用情景:最近有个需求是统计后台应用运行时间,如果一个应用在后台运行超过一定时间就Kill掉进程,达到省电的目的。此时就可以使用PkgUsageStats这个类来实现啦!
通过com.android.internal.os.PkgUsageStats这个类可以得到一个应用程序的启动次数,运行时间等信息,功能强大,但是google并没有将这个类作为API接口提供给开发者,如果在android下开发,可以通过以下代码来使用这个类:
import com.android.internal.app.IUsageS
import com.android.internal.os.PkgUsageS
//比较两个应用程序的启动次数和运行时间
public final int compare(ApplicationInfo a, ApplicationInfo b) {
ComponentName aName = a.intent.getComponent();
ComponentName bName = b.intent.getComponent();
int result = 0;
// get usagestats service
IUsageStats mUsageStatsService = IUsageStats.Stub
.asInterface(ServiceManager.getService("usagestats"));
// get PkgUsageStats
PkgUsageStats aStats = mUsageStatsService.getPkgUsageStats(aName);
PkgUsageStats bStats = mUsageStatsService.getPkgUsageStats(bName);
if (aStats != null && bStats != null) {
if ((aStats.launchCount > bStats.launchCount)
|| ((aStats.launchCount == bStats.launchCount) && (aStats.usageTime > bStats.usageTime)))
result = -1;
else if ((aStats.launchCount < bStats.launchCount)
|| ((aStats.launchCount == bStats.launchCount) && (aStats.usageTime < bStats.usageTime)))
result = 1;
result = 0;
} else if (aStats != null && bStats == null) {
result = -1;
} else if (aStats == null && bStats != null) {
result = 1;
} catch (RemoteException e) {
Log.i("TAG", "get package usage stats fail");
那么如果想在sdk中使用这个 类要如果作呢--可以使用反射 的方法,代码如下:
public final int compare(ApplicationInfo a, ApplicationInfo b) {
ComponentName aName = a.intent.getComponent();
ComponentName bName = b.intent.getComponent();
int aLaunchCount, bLaunchC
long aUseTime, bUseT
int result = 0;
// 获得ServiceManager类
Class ServiceManager = Class
.forName("android.os.ServiceManager");
// 获得ServiceManager的getService方法
Method getService = ServiceManager.getMethod("getService",
java.lang.String.class);
// 调用getService获取RemoteService
Object oRemoteService = getService.invoke(null, "usagestats");
// 获得IUsageStats.Stub类
Class cStub = Class
.forName("com.android.internal.app.IUsageStats$Stub");
// 获得asInterface方法
Method asInterface = cStub.getMethod("asInterface",
android.os.IBinder.class);
// 调用asInterface方法获取IUsageStats对象
Object oIUsageStats = asInterface.invoke(null, oRemoteService);
// 获得getPkgUsageStats(ComponentName)方法
Method getPkgUsageStats = oIUsageStats.getClass().getMethod(
"getPkgUsageStats", ComponentName.class);
// 调用getPkgUsageStats 获取PkgUsageStats对象
Object aStats = getPkgUsageStats.invoke(oIUsageStats, aName);
Object bStats = getPkgUsageStats.invoke(oIUsageStats, bName);
// 获得PkgUsageStats类
Class PkgUsageStats = Class
.forName("com.android.internal.os.PkgUsageStats");
aLaunchCount = PkgUsageStats.getDeclaredField("launchCount")
.getInt(aStats);
bLaunchCount = PkgUsageStats.getDeclaredField("launchCount")
.getInt(bStats);
aUseTime = PkgUsageStats.getDeclaredField("usageTime").getLong(
bUseTime = PkgUsageStats.getDeclaredField("usageTime").getLong(
if ((aLaunchCount > bLaunchCount)
|| ((aLaunchCount == bLaunchCount) && (aUseTime > bUseTime)))
result = 1;
else if ((aLaunchCount < bLaunchCount)
|| ((aLaunchCount == bLaunchCount) && (aUseTime < bUseTime)))
result = -1;
result = 0;
} catch (Exception e) {
Log.e("###", e.toString(), e);
如何看自己的android的详细使用信息:
我们使用Andoroid手机时想看看自己的手机的使用情况,那么我们又如何去操作呢?也是必需得像程序这样要自己写一个程序才能查看吧,如果用户不是的,那得怎么办,呵,其实我们查看自己的手机使用详情是没有那么复杂的,今天就会大家说一下如何查询自己的手机的使用情况,下面是具体的查看方法,
其实查看方法非常简单,直接进入的工程模式即可,操作步骤如下:(笔者的android手机是4.2)
1、首先进入Android手机操作系统的拨号界面,直接输入“*#*#4636#*#*”(不加引号)即可以快速进入Android操作系统的工程测试模式。
2、在“测试”模式菜单中有手机信息“Phone information”、电池信息“Battery information”、WI-FI信息“WI-FI information”、使用状态“Usage statistics”四个选项。
3、我们点击选择第二项“Battery information”进入电池信息,然后就可以看到手机电池的详细信息了,其中包括电量等级、电池状态、温度、电池材质、电压等等信息。
4: 我们相应点击其实的选择就可以看到其实的相应的使用详细信息
==================================================================================================================
import com.android.internal.app.IUsageS
import com.android.settings.R;
import android.app.A
import android.content.C
import android.content.pm.ApplicationI
import android.content.pm.PackageM
import android.content.pm.PackageManager.NameNotFoundE
import android.os.B
import android.os.RemoteE
import android.os.ServiceM
import com.android.internal.os.PkgUsageS
import java.util.ArrayL
import java.util.C
import java.util.HashM
import java.util.L
import java.util.M
import android.util.L
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import android.widget.AdapterV
import android.widget.BaseA
import android.widget.ListV
import android.widget.S
import android.widget.TextV
import android.widget.AdapterView.OnItemSelectedL
* Activity to display package usage statistics.
public class UsageStats extends Activity implements OnItemSelectedListener {
private static final String TAG="UsageStatsActivity";
private static final boolean localLOGV =
private Spinner mTypeS
private ListView mListV
private IUsageStats mUsageStatsS
private LayoutInflater mI
private UsageStatsAdapter mA
private PackageManager mPm;
public static class AppNameComparator implements Comparator {
Map mAppLabelL
AppNameComparator(Map appList) {
mAppLabelList = appL
public final int compare(PkgUsageStats a, PkgUsageStats b) {
String alabel = mAppLabelList.get(a.packageName).toString();
String blabel = mAppLabelList.get(b.packageName).toString();
pareTo(blabel);
public static class LaunchCountComparator implements Comparator {
public final int compare(PkgUsageStats a, PkgUsageStats b) {
// return by descending order
return b.launchCount - a.launchC
public static class UsageTimeComparator implements Comparator {
public final int compare(PkgUsageStats a, PkgUsageStats b) {
long ret = a.usageTime-b.usageT
if (ret == 0) {
if (ret < 0) {
return -1;
// View Holder used when displaying views
static class AppViewHolder {
TextView pkgN
TextView launchC
TextView usageT
class UsageStatsAdapter extends BaseAdapter {
// Constants defining order for display order
private static final int _DISPLAY_ORDER_USAGE_TIME = 0;
private static final int _DISPLAY_ORDER_LAUNCH_COUNT = 1;
private static final int _DISPLAY_ORDER_APP_NAME = 2;
private int mDisplayOrder = _DISPLAY_ORDER_USAGE_TIME;
private List mUsageS
private LaunchCountComparator mLaunchCountC
private UsageTimeComparator mUsageTimeC
private AppNameComparator mAppLabelC
private HashMap mAppLabelM
UsageStatsAdapter() {
mUsageStats = new ArrayList();
mAppLabelMap = new HashMap();
PkgUsageStats[]
stats = mUsageStatsService.getAllPkgUsageStats();
} catch (RemoteException e) {
Log.e(TAG, "Failed initializing usage stats service");
if (stats == null) {
for (PkgUsageStats ps : stats) {
mUsageStats.add(ps);
// load application labels for each application
ApplicationInfo appInfo = mPm.getApplicationInfo(ps.packageName, 0);
label = appInfo.loadLabel(mPm);
} catch (NameNotFoundException e) {
label = ps.packageN
mAppLabelMap.put(ps.packageName, label);
// Sort list
mLaunchCountComparator = new LaunchCountComparator();
mUsageTimeComparator = new UsageTimeComparator();
mAppLabelComparator = new AppNameComparator(mAppLabelMap);
sortList();
public int getCount() {
return mUsageStats.size();
public Object getItem(int position) {
return mUsageStats.get(position);
public long getItemId(int position) {
public View getView(int position, View convertView, ViewGroup parent) {
// A ViewHolder keeps references to children views to avoid unneccessary calls
// to findViewById() on each row.
// When convertView is not null, we can reuse it directly, there is no need
// to reinflate it. We only inflate a new View when the convertView supplied
// by ListView is null.
if (convertView == null) {
convertView = mInflater.inflate(R.layout.usage_stats_item, null);
// Creates a ViewHolder and store references to the two children views
// we want to bind data to.
holder = new AppViewHolder();
holder.pkgName = (TextView) convertView.findViewById(R.id.package_name);
holder.launchCount = (TextView) convertView.findViewById(R.id.launch_count);
holder.usageTime = (TextView) convertView.findViewById(R.id.usage_time);
convertView.setTag(holder);
// Get the ViewHolder back to get fast access to the TextView
// and the ImageView.
holder = (AppViewHolder) convertView.getTag();
// Bind the data efficiently with the holder
PkgUsageStats pkgStats = mUsageStats.get(position);
if (pkgStats != null) {
CharSequence label = mAppLabelMap.get(pkgStats.packageName);
holder.pkgName.setText(label);
holder.launchCount.setText(String.valueOf(pkgStats.launchCount));
holder.usageTime.setText(String.valueOf(pkgStats.usageTime)&#43;" ms");
Log.w(TAG, "No usage stats info for package:" &#43; position);
return convertV
void sortList(int sortOrder) {
if (mDisplayOrder == sortOrder) {
// do nothing
mDisplayOrder= sortO
sortList();
private void sortList() {
if (mDisplayOrder == _DISPLAY_ORDER_USAGE_TIME) {
if (localLOGV) Log.i(TAG, "Sorting by usage time");
Collections.sort(mUsageStats, mUsageTimeComparator);
} else if (mDisplayOrder == _DISPLAY_ORDER_LAUNCH_COUNT) {
if (localLOGV) Log.i(TAG, "Sorting launch count");
Collections.sort(mUsageStats, mLaunchCountComparator);
} else if (mDisplayOrder == _DISPLAY_ORDER_APP_NAME) {
if (localLOGV) Log.i(TAG, "Sorting by application name");
Collections.sort(mUsageStats, mAppLabelComparator);
notifyDataSetChanged();
/** Called when the activity is first created. */
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
mUsageStatsService = IUsageStats.Stub.asInterface(ServiceManager.getService("usagestats"));
if (mUsageStatsService == null) {
Log.e(TAG, "Failed to retrieve usagestats service");
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mPm = getPackageManager();
setContentView(R.layout.usage_stats);
mTypeSpinner = (Spinner) findViewById(R.id.typeSpinner);
mTypeSpinner.setOnItemSelectedListener(this);
mListView = (ListView) findViewById(R.id.pkg_list);
// Initialize the inflater
mAdapter = new UsageStatsAdapter();
mListView.setAdapter(mAdapter);
public void onItemSelected(AdapterView parent, View view, int position,
long id) {
mAdapter.sortList(position);
public void onNothingSelected(AdapterView parent) {
// do nothing
================================================================================
来源网络:
android本身有PkgUsageStats等相关类来统计应用使用情况,但这些类在SDK不公开,只能通过反射或者在源码环境下才能访问到。所以,针对这一特点,如果需要获取应用使用信息,可以采取反射或者源码下开发这两种方式。
1、在源码环境下(源码环境下可以访问一些标记为hide的方法),代码如下:
[java] view
private void getPkgUsageStats()
IUsageStats statsService = (IUsageStats) IUsageStats.Stub.
asInterface(ServiceManager.getService("usagestats"));
PkgUsageStats[] pkgStats =
pkgStats = statsService.getAllPkgUsageStats();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(pkgStats != null)
StringBuffer sb = new StringBuffer();
sb.append("nerver used : ");
for(PkgUsageStats usageStats : pkgStats)
String packageName = usageStats.packageN
int launchCount = usageStats.launchC
long usageTime = usageStats.usageT
if(launchCount > 0)
Log.v("getPkgUsageStats",packageName &#43; "
count: " &#43; launchCount &#43; "
&#43; usageTime);
sb.append(packageName&#43;" ");
Log.v("getPkgUsageStats",sb.toString());
2、通过反射来调用,代码如下:
[java] view
* Use reflect to get Package Usage Statistics data.
public static void getPkgUsageStats() {
LogUtils.d(TAG, "[getPkgUsageStats]");
Class cServiceManager = Class
.forName("android.os.ServiceManager");
Method mGetService = cServiceManager.getMethod("getService",
java.lang.String.class);
Object oRemoteService = mGetService.invoke(null, "usagestats");
// IUsageStats oIUsageStats =
// IUsageStats.Stub.asInterface(oRemoteService)
Class cStub = Class
.forName("com.android.internal.app.IUsageStats$Stub");
Method mUsageStatsService = cStub.getMethod("asInterface",
android.os.IBinder.class);
Object oIUsageStats = mUsageStatsService.invoke(null,
oRemoteService);
// PkgUsageStats[] oPkgUsageStatsArray =
// mUsageStatsService.getAllPkgUsageStats();
Class cIUsageStatus = Class
.forName("com.android.internal.app.IUsageStats");
Method mGetAllPkgUsageStats = cIUsageStatus.getMethod(
"getAllPkgUsageStats", (Class[]) null);
Object[] oPkgUsageStatsArray = (Object[]) mGetAllPkgUsageStats
.invoke(oIUsageStats, (Object[]) null);
LogUtils.d(TAG, "[getPkgUsageStats] oPkgUsageStatsArray = "&#43;oPkgUsageStatsArray);
Class cPkgUsageStats = Class
.forName("com.android.internal.os.PkgUsageStats");
StringBuffer sb = new StringBuffer();
sb.append("nerver used : ");
for (Object pkgUsageStats : oPkgUsageStatsArray) {
// get pkgUsageStats.packageName, pkgUsageStats.launchCount,
// pkgUsageStats.usageTime
String packageName = (String) cPkgUsageStats.getDeclaredField(
"packageName").get(pkgUsageStats);
int launchCount = cPkgUsageStats
.getDeclaredField("launchCount").getInt(pkgUsageStats);
long usageTime = cPkgUsageStats.getDeclaredField("usageTime")
.getLong(pkgUsageStats);
if (launchCount > 0)
LogUtils.d(TAG, "[getPkgUsageStats] "&#43; packageName &#43; "
&#43; launchCount &#43; "
" &#43; usageTime);
sb.append(packageName &#43; "; ");
LogUtils.d(TAG, "[getPkgUsageStats] " &#43; sb.toString());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
这是获取信息的两种实现方式,另外,要想让程序能够正常运行并成功获取到数据,我们还需要做如下的配置:
1、在AndroidManifest.xml中增加android:sharedUserId="android.uid.system"
<manifest xmlns:android="/apk/res/android"
package="com.xxx"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="android.uid.system" >
还有权限的声明
2、对apk进行系统签名,在源码中取platform.pk8、platform.x509.pem、signapk.jar文件并通过如下命令实现apk的签名
java -jar signapk.jar platform.x509.pem platform.pk8 unsigned.apk signed.apk
unsigned.apk为签名之前的apk,signed.apk为通过命令签名成功的apk
UsageStats信息通过UsageStatsService保存在路径data/system/usagestats目录下,在系统启动后,UsageStatsService服务开启,在该Service的构造函数中调用readStatsFromFile()方法从本地获取UsageStats信息,并保存到mStats成员变量中。(见源码UsageStatsService.java)
我们通过getAllPkgUsageStats()方法来获取信息,但是该方法所返回的信息并非从文件中读取的全部数据,而是开机后启动过的apk集合,代码如下:
[java] view
public PkgUsageStats[] getAllPkgUsageStats() {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.PACKAGE_USAGE_STATS, null);
synchronized (mStatsLock) {
int size = mLastResumeTimes.size();
if (size <= 0) {
PkgUsageStats retArr[] = new PkgUsageStats[size];
int i = 0;
for (Map.Entry<String, Map> entry : mLastResumeTimes.entrySet()) {
String pkg = entry.getKey();
long usageTime = 0;
int launchCount = 0;
PkgUsageStatsExtended pus = mStats.get(pkg);
if (pus != null) {
usageTime = pus.mUsageT
launchCount = pus.mLaunchC
retArr[i] = new PkgUsageStats(pkg, launchCount, usageTime, entry.getValue());
i&#43;&#43;;
return retA
所以根据以上方法仅能获取开机后被启动过的apk信息集合,那如何获取所有apk的信息集合呢?该Service提供有另一个方法:
public PkgUsageStats getPkgUsageStats(ComponentName componentName)
我们可以先获取当前系统所有安装包包名,再根据包名逐个通过此方法去获取对应包名的启动次数和运行时间。android 判断某个应用是否正在运行_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
android 判断某个应用是否正在运行
  在手机安全中心或者手机管理中心可以看见后台管理,点击进去就会看见;还有一种方法就是在手机设置中,应用程序中就可以看见。  查看正在运行软件的方法:打开手机设置。在设置中找到应用选项,点击应用。应用里会看见应用程序,点击进去。看到个人应用、系统应用、正在运行三栏。点击正在运行就会看到所有正在运行的软件了。
采纳率:66%
infos = am.getSystemService(ACTIVITY_SERVICE);
List&RunningAppProcessInfo&*** 判断指定包名的进程是否运行 * @param context* @param packageName 指定包名* @return 是否运行*/public static boolean isRunning(Context context,String packageName){
ActivityManager am = (ActivityManager) context&#47
1长按主页键跳出好多应用图标显示有的都是正在运行。2打开设置里的应用,有一项就是正在运行的应用,
为您推荐:
其他类似问题
android的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;10:38 提问
从我的应用程序中,我如何在android网页浏览器中打开一个URL
如何在内置的网页浏览器中从代码打开一个URL,而不是在我的应用程序中?
我尝试这样做:
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(strURL));
startActivity(myIntent);
但是我得到了一个异常:"No activity found to handle Intent{action=android.intent.action.VIEW data ="
按赞数排序
试试这个:
Intent browserIntent= new Intent(Intent.ACTION_VIEW, Uri.parse(""));startActivity(browserIntent);
我用这个是可以的。
对于缺少的"http://" ,我通常是这样做:
if (!url.startsWith("http://") && !url.startsWith("https://"))
url = "http://" +
我也可能将用户输入的带有"http://"的URL地址先填到你的EditText
在2.3中,我是这样做的,而且也成功了
final Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url));
activity.startActivity(intent);
区别就是使用了Intent.ACTION_VIEW,而不是"android.intent.action.VIEW"字符串。
多种常用Intent,有你要的答案,前面需要加协议http://
你的手机中没有可以打开网页的应用
其他相关推荐相关文章推荐
今天在调试android程序时,发现程序有点卡,觉得应该看看程序的cpu和内存消耗,一直以来都在windows下编程,已经习惯了windows任务管理器或者资源监视器,此时猛然发现在android环境...
adb shell 计算cpu利用率
1. 在IDE中查看Log信息
当程序运行垃圾回收的时候,会打印一条Log信息,其格式如下:
D/dalvikvm:
GC_Reason表示导致垃圾回收的原因以及当前的回收类...
aapt命令小结
aapt即Android Asset Packaging Tool.本文小结了一下该工具的用法。
aapt l[ist] [-v] [-a] file.{zip,ja...
最近学习monkey的时候,了解了一下关于内存溢出的知识,可惜用eclipse的DDMS只能获取到debug调试的进程,所以就写了一个简单的获取某个包占用内存的方法,分享出来,供大家参考。
最近邱同学让我整理一下快看测试的性能指标,问了一下老大,他跟我说了响应时间、资源利用率和吞吐量这些。这里先了解一下手机的CPU和内存的查看方法,不过测试性能里的资源利用率好像说的是服务器端的,不知道有...
用Android Studio 调试程序查看优化CUP使用率
在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小。这个该如何实现呢?通过读取文件"/proc/meminfo"的信息能够获取手机Memory的总...
正常情况下,每一个Android应用启动后都会对应一个进程,当前越来越多应用会有多个进程,为了推送,为了内存,或者为了保活。如何查看应用进程呢。1.DOS下面cmd,然后打开adb shell,直接p...
他的最新文章
讲师:董晓杰
讲师:姚远
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 安卓8.0 查看运行内存 的文章

 

随机推荐