今天给大家的小例子是列出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的保活机制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)