怎么查看Android设备中的启动服务

怎么查看Android设备中的启动服务,第1张

今天给大家的小例子是列出Android设备中所有启动的服务,及判断某个服务是否开启,具体步骤如下了:

第一步:新建一个Android工程,命名为RunningService。

第二步:修改RunningServicejava代码如下:

package comtutorrunningservice;

import javautilList;

import androidappActivity;

import androidappActivityManager;

import androidosBundle;

import androidwidgetTextView;

public class RunningService extends Activity {

/ Called when the activity is first created /

@Override

public void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

//setContentView(Rlayoutmain);

TextView mTextView = new TextView(this);

ActivityManager mActivityManager =

(ActivityManager)getSystemService(ACTIVITY_SERVICE);

List<ActivityManagerRunningServiceInfo> mServiceList = mActivityManagergetRunningServices(30);

//我要判断的服务名字,我在launcher2里加了一个音乐服务

final String musicClassName = "comandroidlauncher2MusicService";

boolean b = MusicServiceIsStart(mServiceList, musicClassName);

mTextViewsetText("你要判断的服务状态为: " +b+"/n" + getServiceClassName(mServiceList));

setContentView(mTextView);

}

//通过Service的类名来判断是否启动某个服务

private boolean MusicServiceIsStart(List<ActivityManagerRunningServiceInfo> mServiceList,String className){

for(int i = 0; i < mServiceListsize(); i ++){

if(classNameequals(mServiceListget(i)servicegetClassName())){

return true;

}

}

return false;

}

//获取所有启动的服务的类名

private String getServiceClassName(List<ActivityManagerRunningServiceInfo> mServiceList){

String res = "";

for(int i = 0; i < mServiceListsize(); i ++){

res+=mServiceListget(i)servicegetClassName()+ " /n";

}

return res;

}

}

第三步:运行上述工程,查看效果!

java的webservice获取post提交的json数据的示例如下:

import orgapache>

经过整理可行的方案有以下四种,最好配合使用:

1前台服务

前台服务是被认为是用户已知的正在运行的服务,当系统需要释放内存时不会优先杀掉该进程,前台服务必须有一个 notification 在状态栏中显示。

NotificationCompatBuilder nb = new NotificationCompatBuilder(this);

nbsetOngoing(true);

nbsetContentTitle(getString(Rstringapp_name));

nbsetContentText(getString(Rstringapp_name));

nbsetSmallIcon(Rdrawableicon);

PendingIntent pendingintent =PendingIntentgetActivity(this, 0, new Intent(this, Mainclass), 0);

nbsetContentIntent(pendingIntent);

startForeground(1423, nbbuild());

可行性此方法对防止系统回收有一定的效果,可以减少被回收的概率,但是系统在内存极低的情况下,该Service还是会被kill掉,并且不一定会重启。而清理工具或者手动强制结束,进程直接挂掉,并不会重启。

2监听系统广播

通过监听系统的一些广播,比如:手机开机、解锁屏、网络连接状态变更、应用状态改变等等,然后判断Service是否存活,若否则启动Service。

可行性Android系统在31版本以后为了加强系统安全性和优化性能对系统广播进行了限制,应用监控手机开机、解锁屏、网络连接状态改变等有规律的系统广播在android31以后,首次安装未启动或者用户强制停止后,应用无法监听到。Android N取消了网络切换广播。

3应用之间互拉

利用不同的app进程使用广播来进行相互唤醒,比如支付宝、淘宝、天猫、等阿里系的app,如果打开其中任意一个应用,其它阿里系的app也会唤醒了,其实BAT系都差不多。另外现在很多推送sdk也会唤醒app。

可行性多个app应用唤醒需要相互之间有关联才能实现,推送sdk应用间唤醒当用户强制停止后无法唤醒。

4利用Android系统提供的帐号和同步机制实现

在应用中建立一个帐号,然后开启自动同步并设置同步间隔时间,利用同步唤醒app。账号建立后在手机设置-账号中能看到应用的账号,用户可能会删除账号或者停止同步,故需要经常检测账号是否能正常同步。

//建立账号

AccountManager accountManager = AccountManagerget(mContext);

Account riderAccount = new Account(mContextgetString(Rstringapp_name), ConstantACCOUNT_TYPE);

accountManageraddAccountExplicitly(riderAccount, mContextgetString(Rstringapp_name), null);

ContentResolversetIsSyncable(riderAccount, ConstantACCOUNT_AUTHORITY, 1);

ContentResolveraddPeriodicSync(riderAccount, ConstantACCOUNT_AUTHORITY, new Bundle(), 60);

//开启同步

ContentResolversetSyncAutomatically(riderAccount, ConstantACCOUNT_AUTHORITY, true);

bundle更新服务通知就是bundle有了新版本比旧版本更方便快捷需要进行更新。根据查询相关公开信息显示Bundle是Android开发中的一个类,用于在活动之间传输数据。bundle是一种地图类型的容器类,用于存储字符串和可包裹的数据。

Log说的很清楚了,MainActivity第55行报NullPointerException,看看你代码的55行是什么,错误应该是出在WebService返回的结果,你没有对返回的List做非空判断就用这个List去初始化适配器了

另外,调用WebService的 *** 作应该放在线程里执行,你的写法如果网速慢直接卡住界面了

Android开发中,当需要创建在后台运行的程序的时候,就要使用到Service。Service 可以分为有无限生命和有限生命两种。特别需要注意的是Service跟Activities是不同的(简单来说可以理解为后台与前台的区别),例如,如果需要使用Service的话,需要调用startService(),从而利用startService()去调用Service中的OnCreate()和onStart()方法来启动一个后台的Service。 启动一个Service的过程如下:contextstartService() ->onCreate()- >onStart()->Service running其中onCreate()可以进行一些服务的初始化工作,onStart()则启动服务。 停止一个Service的过程如下:contextstopService() | ->onDestroy() ->Service stop 接下来的实例是一个利用后台服务播放音乐的小例子,点击start运行服务,点击stop停止服务。ServicesDemojava(是一个Activity)

package comandroidmyservice;

import androidappActivity;

import androidcontentIntent;

import androidosBundle;

import androidutilLog;

import androidviewView;

import androidviewViewOnClickListener;

import androidwidgetButton;

public class ServiceDemo extends Activity implements OnClickListener {

private static final String TAG = "ServiceDemo";

Button buttonStart, buttonStop;

}

除此之外还要在Manifest里面声明服务:

<xml version="10" encoding="utf-8">

<manifest xmlns:android=" >

Bundle只是一个信息的载体

将内部的内容以键值对组织

Intent负责Activity之间的交互

自己是带有一个Bundle的

IntentputExtras(Bundle

bundle)直接将Intent的内部Bundle设置为参数里的bundle

IntentgetExtras()直接可以获取Intent带有的Bundle

ntentputExtra(key,

value)

Bundle

bundle

=

intentgetExtras();

bundleputXXX(key,

value);

intentputExtras(bundle);

是等价的

intentgetXXXExtra(key)

Bundle

bundle

=

intentgetExtras();

bundle

getXXX(key);

是等价的(XXX代表数据/对象类型

String

boolean

以上就是关于怎么查看Android设备中的启动服务全部的内容,包括:怎么查看Android设备中的启动服务、Java 的Webservice 如何获取post 提交的json数据、Service的保活机制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9559794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存