导航:首页 > 操作系统 > android监听程序退出

android监听程序退出

发布时间:2022-12-22 04:51:14

android 后台service怎么监听到应用退出状态

是监听自己的程序退出状态
退出的时候毁掉用OnDestory()。
在这个方法里弄个标志位,servirce就不断判断这个标志位。
标志位改变了,说明退出了。

❷ Android 能不能监听到第三方应用App的启动和退出

可以,我原来做的是用一个计时器(为了准确率可以0.1s轮询一次)去监听手机的TopActivity,获取TopActivity的包名(应用的包名是唯一的),当TopActivity发生变化就说明使用的应用发生了改变,就实现了监听第三方应用的启动和退出(其中也包括系统应用,过滤包名就可以了)。有什么问题再问我

❸ Android应用如何监听自己是否被卸载及卸载反

1,注册BroadcastReceiver,监听"android.intent.action.PACKAGE_REMOVED"系统广播

结果:NO。未写代码,直接分析,卸载的第一步就是退出当前应用的主进程,而此广播是在已经卸载完成后才发出的,此时主进程都没有了,去哪onReceive()呢?

2,若能收到"将要卸载XX包"的系统广播,在主进程被退出之前就抢先进行反馈处理就好了,可惜没有这样的系统广播,不过经过调研,倒是发现了一个办法,读取系统log,当日志中包含"android.intent.action.DELETE"和自己的包名时,意味着自己将要被卸载。

结果:NO。调试时发现此方法有两个缺陷,(1)点击设置中的卸载按钮即发出此Intent,此时用户尚未在弹框中确认卸载;(2)pm命令卸载不出发此Intent,意味着被诸如手机安全管家,豌豆荚等软件卸载时,无法提前得知卸载意图。

3,由于时间点不容易把控,所以干脆不依赖系统广播或log,考虑到卸载过程会删除"/data/data/包名"目录,我们可以用线程直接轮询这个目录是否存在,以此为依据判断自己是否被卸载。

结果:NO。同方法1,主进程退出,相应的线程必定退出,线程还没等到判断目录是否存在就已经被销毁了。

4,改用C端进程轮询"/data/data/包名"目录是否存在

结果:YES。借助java端进程fork出来的C端进程在应用被卸载后不会被销毁。

二 方案

Android自API1就有的一个类FileObserver,这个类用于监听某个文件的变化状态,如果是目录,这个类还可以监听其子目录及子目录文件的变化状态,通过阅读FileObserver源码,发现其实现利用了Linux内核中一个重要的机制inotify,它是一个内核用于通知用户空间程序文件系统变化的机制,详情可参考http://en.wikipedia.org/wiki/Inotify,里面对inotify有比较详细的说明。

使用inotify的好处就在于不需要每1s的轮询,这样就不会无谓地消耗系统资源,使用inotify时会用read()方法阻塞进程,直到收到IN_DELETE通知,此时进程重新被唤醒,执行反馈处理流程。

三方案

阻塞结束后,通过调用exec函数发出am命令调起浏览器访问网页,在API16(Android 4.1.x)的设备上尚可正常访问网页,而API17(Android 4.2.x)的设备上连浏览器也不能调起。解决方案:增加处理分支,若API>=17,将userSerialNumber传递给C端进程,然后在am命令中带上参数--user userSerialNumber即可

❹ Android 能不能监听到第三方应用App的启动和退出

据我所知,答案是No,没有这样的broadcast,你没法用receiver去监听。唯一的办法就是后台查询。 你的采纳是我前进的动力, 记得好评和采纳,答题不易,互相帮助, 手机提问的朋友在客户端右上角评价点(满意)即可. 如果你认可我的回答,请及时点击(采纳为满意回答)按钮!!

❺ android 怎么判断应用是否退出

在Android中退出程序比较麻烦,尤其是在多个Activity的程序中,在2.2之前可以采用如下代码退出程序:

Java代码

[java]
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());

ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());

此种方法是一种最方便和最简单的退出程序的办法,但是在2.2和2.2之后就不能用了,那么如果我们要退出程序有4种办法:

采用content
view栈:如果程序是多界面,但是又没有强制要求每一个界面一个Activity,可以将每个界面设计为一个View,在界面切换时,只需要调用
Activity的setContentView方法设置Activity的Contentview,这样退出程序只需要将这一个Activity退出
就可以了,但是需要设计一个栈来管理content view。
可以自定义一个Activity的栈,在程序退出时将栈中的所有的Activity进行finish,这种方法,我以前的文章中有详述。
前两种方法的精髓之处都是需要自己设计一个栈用来管理界面或者Activity,这样程序就比较复杂一些。 第3中方法就是,先让程序到Home界面,然后再将process杀死:代码如下:

[java]
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
android.os.Process.killProcess(Process.myPid());

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
android.os.Process.killProcess(Process.myPid());

4.还有一种就是使用方法是使用Android的Broadcast机制。在所有的Activity中注册退出程序的消息,当收到消息时调用finish方法。 然后再有退出程序功能的Activity上广播关闭消息。代码如下:

[java]
package com.kingtone.activity;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
/**
* 所有Activity的父类,用来注册退出程序的广播事件,
* 并且对收到的退出程序事件进行处理
* @author Administrator
*
*/
public class CommonActivity extends Activity {

//广播的内部类,当收到关闭事件时,调用finish方法结束activity
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};

@Override
public void onResume() {
super.onResume();
//在当前的activity中注册广播
IntentFilter filter = new IntentFilter();
filter.addAction(GlobalVarable.EXIT_ACTION);
this.registerReceiver(this.broadcastReceiver, filter);
}
}

package com.kingtone.activity;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
/**
* 所有Activity的父类,用来注册退出程序的广播事件,
* 并且对收到的退出程序事件进行处理
* @author Administrator
*
*/
public class CommonActivity extends Activity {

//广播的内部类,当收到关闭事件时,调用finish方法结束activity
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};

@Override
public void onResume() {
super.onResume();
//在当前的activity中注册广播
IntentFilter filter = new IntentFilter();
filter.addAction(GlobalVarable.EXIT_ACTION);
this.registerReceiver(this.broadcastReceiver, filter);
}
}

在需要退出程序的Activity(CommonActivity的子类)中,退出程序代码如下:

[java]
Intent intent = new Intent();
intent.setAction(GlobalVarable.EXIT_ACTION); // 退出动作
this.sendBroadcast(intent);// 发送广播
super.finish();
//退出后台线程,以及销毁静态变量
System.exit(0);

Intent intent = new Intent();
intent.setAction(GlobalVarable.EXIT_ACTION); // 退出动作
this.sendBroadcast(intent);// 发送广播
super.finish();
//退出后台线程,以及销毁静态变量
System.exit(0);

监听并处理用户按下back键的方法

[java]
package com.example.android_test01;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
System.out.println("你按下了back1");
show_simple();
return super.onKeyDown(keyCode, event);
}
//先调用的onKeyDown(int keyCode, KeyEvent event)方法,然后调用的onBackPressed()方法;
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
System.out.println("按下back,立刻退出activity时调用");
super.onBackPressed();
}

public void show_simple()
{
AlertDialog.Builder builder=new Builder(this);
builder.setTitle("欢迎使用本软件");
builder.setPositiveButton("确定", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
//退出应用;
finish();
}
});
builder.setNegativeButton("取消", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

}
}) ;
builder.create().show();

}
}

package com.example.android_test01;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
System.out.println("你按下了back1");
show_simple();
return super.onKeyDown(keyCode, event);
}
//先调用的onKeyDown(int keyCode, KeyEvent event)方法,然后调用的onBackPressed()方法;
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
System.out.println("按下back,立刻退出activity时调用");
super.onBackPressed();
}

public void show_simple()
{
AlertDialog.Builder builder=new Builder(this);
builder.setTitle("欢迎使用本软件");
builder.setPositiveButton("确定", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
//退出应用;
finish();
}
});
builder.setNegativeButton("取消", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

}
}) ;
builder.create().show();

}
}

❻ android可以监听application退出吗

可以给application注册一个ondestroy事件,即销毁时触发的事件。
在Android中,Activity有个栈,一个Activity结束掉,会回到上一个Activity,并不是退出应用程序。
Android中,退出应用程序的方式:
1.通过pid
int pid = android.os.Process.myPid(); //获取当前应用程序的PID
android.os.Process.killProcess(pid); //杀死当前进程
这种方法退出应用,是会保留某些后进程,例如:Service,Notifications等。

2.通过ActivityManager
ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE); //获取应用程序管理器
manager.killBackgroundProcesses(getPackageName()); //强制结束当前应用程序
这种方式退出应用,会结束本应用程序的一切活动,因为本方法会根据应用程序的包名杀死所有进程包括Activity,Service,Notifications等。

❼ android 返回键的监听如何设置

你的MainActivity是第一个Activity吧?你只需要在SecondActivity设置返回监听到MainActivity就可以了。另外你要注意当你启动到一个新的Activity的时候,记得将当前的activity finish掉。
稍微想了一下,我知道你为何按返回键的时候重复在m和s之间跳转了。因为你跳转到M的时候没有将s finish掉,这样的话你反悔其实是返回到s,而你又监听了s的返回键,因此又回到了m,周而复始。

❽ android 如何监听前后台切换

        这段时间有需求,需要利用aop切面技术完成数据统计的工作,其中需要统计活跃(定的规则是:用户从后台切换到前台就算一次活跃)。所以关于如何监听前后台切换就有以下的描写。

一.使用ActivityLifecycleCallbacks简单app进入后台

有时需要监听到应用在前后台切换并做些处理,一般的做法可能是建立一个BaseActivity,然后全部的Activity都继承它,在BaseActivity的onStart和onStop中计数去处理。这样并不是最好的方式,不做详细介绍,有更好的方式,道理其实差不多,就是借助ActivityLifecycleCallbacks来实现。

1)写了个帮助类:

2)Application中使用(注意:仅在Application中才能使用,因为Application的生命周期能监听到每个Activity)

原文地址: https://blog.csdn.net/bzlj2912009596/article/details/80073396

❾ android 如何监听程序从前台转入后台

一、通过ActivityManager.RunningAppProcessInfo判断

首先,我们需要写一个BaseActivity,然后让我们应用程序的Activity都继承自BaseActivity,这样就可以统一管理,然后在BaseActivity的onResume()和onStop()方法中进行判断应用程序是否进入到后台并且是否从后台返回到了前台,直接看代码:

{

publicstaticbooleanisActive;//全局变量

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
}

@Override
protectedvoidonResume(){
if(!isActive){
//app从后台唤醒,进入前台
isActive=true;
Log.i("ACTIVITY","程序从后台唤醒");
}
super.onResume();
}

@Override
protectedvoidonStart(){
super.onStart();
}

@Override
protectedvoidonPause(){
super.onPause();
}

@Override
protectedvoidonStop(){
if(!isAppOnForeground()){
//app进入后台
isActive=false;//记录当前已经进入后台
Log.i("ACTIVITY","程序进入后台");
}
super.onStop();
}

@Override
protectedvoidonDestroy(){
super.onDestroy();
}

/**
*APP是否处于前台唤醒状态
*
*@return
*/
(){
=(ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
StringpackageName=getApplicationContext().getPackageName();
List<ActivityManager.RunningAppProcessInfo>appProcesses=activityManager
.getRunningAppProcesses();
if(appProcesses==null)
returnfalse;

for(ActivityManager.:appProcesses){
//.
if(appProcess.processName.equals(packageName)
&&appProcess.importance==ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
returntrue;
}
}

returnfalse;
}
}

❿ Android 能不能监听到第三方应用App的启动和退出

应该是可以的。还可以在应用内调用某些应用 或者 是获取并操作其他应用的数据,不过要有相关的权限或者ContentProvider。

监听程序启动见 某大神的博客:
http://blog.csdn.net/xiao_chilun/article/details/52096149

阅读全文

与android监听程序退出相关的资料

热点内容
mysql命令行版本 浏览:303
如何进入itunes找文件夹 浏览:832
CAD中重复命令使用 浏览:477
心智pdf 浏览:475
网站电台直播间源码 浏览:852
文件夹14c和18c的区别 浏览:34
android隐式调用 浏览:667
plc的编程指令边沿继电器 浏览:723
voc文件夹 浏览:864
租广东联通服务器注意什么云空间 浏览:934
javascript高级程序设计pdf 浏览:291
pwm单片机原理 浏览:346
ai算法在线修复图片 浏览:981
scratch编程中如何做射击游戏 浏览:478
at89c51编程器 浏览:343
项目经理叫醒程序员 浏览:344
autocad旋转命令 浏览:661
手机版wpsoffice怎么打包文件夹 浏览:581
在成都学车用什么app 浏览:820
grep命令管道 浏览:428