[ 停止Service ]
在Activity中停止Service
[java] view plain copy
Intent intent = new Intent(this, ClassNameclass);
stopService(intent);
在停止Service后,再启动Service, 则又会调用onCreate(), onStartCommand()
可进行以下操作:
1重新开关机。
2卸载近期安装的第三方软件后观察。
3备份手机数据(电话簿、短信息、多媒体文件等),恢复出厂设置。
如果恢复出厂设置问题依然存在,建议将手机送至就近的服务中心进行检测及进一步处理。
• ContextstartService()
• ContextbindService()
1 在同一个应用任何地方调用 startService() 方法就能启动 Service 了,然后系统会回调 Service 类的
onCreate() 以及 onStart() 方法。这样启动的 Service 会一直运行在后台,直到
ContextstopService() 或者 selfStop() 方法被调用。另外如果一个 Service 已经被启动,其他代码再试图调用
startService() 方法,是不会执行 onCreate() 的,但会重新执行一次 onStart() 。
2 另外一种 bindService() 方法的意思是,把这个 Service 和调用 Service
的客户类绑起来,如果调用这个客户类被销毁,Service 也会被销毁。用这个方法的一个好处是,bindService() 方法执行后
Service 会回调上边提到的 onBind() 方发,你可以从这里返回一个实现了 IBind
接口的类,在客户端操作这个类就能和这个服务通信了,比如得到 Service 运行的状态或其他操作。如果 Service
还没有运行,使用这个方法启动 Service 就会 onCreate() 方法而不会调用 onStart()。
总结:
1
startService()的目的是回调onStart()方法,onCreate()
方法是在Service不存在的时候调用的,如果Service存在(例如之前调用了bindService,那么Service的onCreate方法
已经调用了)那么startService()将跳过onCreate() 方法。
2
bindService()目的是回调onBind()方法,它的作用是在Service和调用者之间建立一个桥梁,并不负责更多的工作(例如一个
Service需要连接服务器的操作),一般使用bindService来绑定到一个现有的Service(即通过StartService启动的服
务)。
由于Service 的onStart()方法只有在startService()启动Service的情况下才调用,故使用onStart()的时候要注意这点。
一、应用程序APP缓存和数据过多,导致强制退出
如果某款APP以前运行好好的,但突然出现“应用程序停止运行”,这时我们可以试试清理该APP的缓存数据。进入“设置→应用程序→全部”,找到并点击某应用的图标,在应用信息界面中选择“清除数据”以及“清除缓存”即可。
二、当然程序出现停止运行也可能是系统内存不足引起的。我们关闭一些不常用应用释放部分内存即可
三、通过手机里装的第三方安全类的软件进行垃圾清理
四、可能是该应用程序和当前系统存在冲突
刚刚安装的某APP出现了运行报错的问题,则很有可能是该APP与手机当前的系统存在冲突。要解决的话要不是将手机系统更新到最新版本,或者将APP更新到最新版本。
五、一些支持存储卡应用安装的也容易出现上述应用停止运行问题,以此在以后选择程序安装位置,请选择“由系统决定”。
六、程序本身问题:有些程序本身存在问题
直接stop或者finish那个Activity最快。想停止传输,就要停止传输服务或者断开传输的线程就好了。不知道你的代码是怎么写,如果你把传输的线程是写在Service里的,那你就直接unbine掉那个Service,这样传输的线程就断开了。按科学来说,程序也应该是这样设计才人性化。
转载 Android如何打开/关闭系统解锁服务?—典型错误分析
最近正在做一个Android的解锁应用,需要屏蔽系统解锁,并在适当的时候打开系统解锁,在网上search了很多有关系统解锁的资料,学到了很多关于系统解锁方面的知识,同时也发现了很多网友犯下的一个共同的错误。现分享一下:
错误一:
总所周知,要关闭系统自带的锁屏服务需要用到以下代码:
mKeyguard = (KeyguardManager) getSystemService(ContextKEYGUARD_SERVICE);
mKeylock = mKeyguardnewKeyguardLock("");
mKeylockdisableKeyguard();
要打开系统锁屏服务需要以下代码:
mKeylockreenableKeyguard()
网上很多朋友对disableKeyguard()的理解为:将屏幕打开并解锁,只要执行这个方法就会是屏幕变亮并自动解锁!同样reenableKeyguard()的作用是关闭屏幕并上锁!
大错而特错了!
我们来看看google api对这两个方法的解释:
disableKeyguard: Disable the keyguard from showing If the keyguard is currently showing, hide it The keyguard will be prevented from showing again untilreenableKeyguard() is called
reenableKeyguard: Reenable the keyguard The keyguard will reappear if the previous call todisableKeyguard() caused it it to be hidden
所以,disableKeyguard只是关闭系统锁屏服务,调用该方法后并不会立即解锁,而是使之不显示解锁,同样reenableKeyguard是恢复锁屏服务,并不会立即锁屏!
错误二:
下面是通过两个按钮来模拟打开/关闭系统锁屏的代码:
package comexamplekeyguard; import androidosBundle; import androidappActivity; import androidappKeyguardManager; import androidappKeyguardManagerKeyguardLock; import androidcontentContext; import androidviewMenu; import androidviewMenuItem; import androidviewView; import androidwidgetButton; import androidsupportv4appNavUtils; public class KeyGuardActivity extends Activity { private Button myButtonOn, myButtonOff; private KeyguardManager km; private final String TAG = "KeyGuardTest"; @Override public void onCreate(Bundle savedInstanceState) { superonCreate(savedInstanceState); setContentView(Rlayoutactivity_key_guard); / 获取KeyGuardManager对象 / km = (KeyguardManager)thisgetApplicationContext()getSystemService(ContextKEYGUARD_SERVICE); myButtonOff = (Button)findViewById(RidbuttonOff); myButtonOffsetOnClickListener(new ButtonOnClickListener(){ public void onClick(View arg0) { / 关闭系统锁屏服务 / kmnewKeyguardLock(TAG)disableKeyguard(); } }); myButtonOn = (Button)findViewById(RidbuttonOn); myButtonOnsetOnClickListener(new ButtonOnClickListener(){public void onClick(View arg0) { / 打开系统锁屏服务 / kmnewKeyguardLock(TAG)reenableKeyguard(); } }); } }
这段代码看起来很完美,但是执行之后会发现:只能关闭锁屏服务,无法恢复锁屏服务!
是什么原因呢?
原来是在调用disableKeyguard和reenableKeyguard的时候必须使用同一个KeyguardLock对象!
程序略加修改:
package comexamplekeyguard; import androidosBundle; import androidappActivity; import androidappKeyguardManager; import androidappKeyguardManagerKeyguardLock; import androidcontentContext; import androidviewMenu; import androidviewMenuItem; import androidviewView; import androidwidgetButton; import androidsupportv4appNavUtils; / @author Onejune @function 打开/关闭系统锁屏服务测试 @note 在打开/关闭系统锁屏服务时必须使用同一个KeyguardLock对象,否则出错 / public class KeyGuardActivity extends Activity { private Button myButtonOn, myButtonOff; private KeyguardManager km; private KeyguardLock kl; private final String TAG = "KeyGuardTest"; @Override public void onCreate(Bundle savedInstanceState) { superonCreate(savedInstanceState); setContentView(Rlayoutactivity_key_guard); / 获取KeyGuardManager对象 / km = (KeyguardManager)thisgetApplicationContext()getSystemService(ContextKEYGUARD_SERVICE); / 获取KeyguardLock对象 / kl = kmnewKeyguardLock(TAG); myButtonOff = (Button)findViewById(RidbuttonOff); myButtonOffsetOnClickListener(new ButtonOnClickListener(){ public void onClick(View arg0) { / 关闭系统锁屏服务 / kldisableKeyguard(); } }); myButtonOn = (Button)findViewById(RidbuttonOn); myButtonOnsetOnClickListener(new ButtonOnClickListener(){ public void onClick(View arg0) { / 打开系统锁屏服务 / klreenableKeyguard(); } }); } }
终于OK!
欢迎分享,转载请注明来源:品搜搜测评网