A. android怎样判断应用程序退到后台
/**
* 程序是否在前台运行
*
*/
public boolean isAppOnForeground() {
ActivityManager activityManager = (ActivityManager) getApplicationContext()
.getSystemService(Context.ACTIVITY_SERVICE);
String packageName = getApplicationContext().getPackageName();
/**
* 获取Android设备中所有正在运行的App
*/
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
if (appProcesses == null)
return false;
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
// The name of the process that this object is associated with.
if (appProcess.processName.equals(packageName)
&& appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
return false;
}
这是我在网上找到的例子,主要的实现原理就是,使用ActivityManager,首先拿到自己App的包名,再拿到Android设备中所有正在运行的App包名,然后对所有的App进行遍历,通过判断正在运行的App中包名有没有和自己的App相等,从而判断自己的App是否退到后台.
@Override
protected void onPause() {
super.onPause();
if(!isAppOnForeground()){
Toast.makeText(getApplicationContext(), TAG+"onPause:",
Toast.LENGTH_SHORT).show();
}else {
sendBroadcast(new Intent(NotificationIntentReceiver.ACTION_ENABLE_MESSAGES)
.setClass(this, NotificationIntentReceiver.class));
Toast.makeText(getApplicationContext(), TAG+"后台运行1",
Toast.LENGTH_SHORT).show();
}
}
然后在onPause()方法中,进行判断,上面代码中实现的是,App退出后台就发送广播,然后在广播中执行Notification,然后在回到Activity时,在onResume()中清除应该清除Notification.
B. 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等。
C. Android 怎么退出整个应用程序
1.后面添加了一个菜单返回功能键,这个方法也只能用system.exit(0)来关闭当前活动的Activity,附代码:
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit");
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener()
{
public boolean onMenuItemClick(MenuItem item)
{
System.exit(0);
return true;
}
});
return true;
}
2.这样太不方便,每次退出界面之后应用程序还在运行,
网上提供了几种方法,将下面SysApplication这个类复制到工程里面,然后在每个Acitivity的oncreate方法里面通过SysApplication.getInstance().addActivity(this); 添加当前Acitivity到ancivitylist里面去,最后在想退出的时候调用SysApplication.getInstance().exit();可直接关闭所有的Acitivity并退出应用程序。
附代码:
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Application;
import android.content.DialogInterface;
import android.content.Intent;
public class SysApplication extends Application {
private List mList = new LinkedList();
private static SysApplication instance;
private SysApplication() {
}
public synchronized static SysApplication getInstance() {
if (null == instance) {
instance = new SysApplication();
}
return instance;
}
// add Activity
public void addActivity(Activity activity) {
mList.add(activity);
}
public void exit() {
try {
for (Activity activity : mList) {
if (activity != null)
activity.finish();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.exit(0);
}
}
public void onLowMemory() {
super.onLowMemory();
System.gc();
}
}
3.在应用程序里面 的activity的oncreate里面添加SysApplication.getInstance().addActivity(this)
如:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SysApplication.getInstance().addActivity(this);
}
D. 安卓系统怎么退出软件
安卓程序退出有多种,每种软件设计者构思不同,方法也不同:
1、在运行某个软件界面时,一直点手机下方的 返回键,弹出对话框——是否退出程序——是——退出程序;若没有弹出对话框,直接回到手机桌面,说明此软件在后台运行(如qq,飞信、微信、360此类软件,步骤可参照2)
2、如qq、微信软件,运行界面——点击手机下方的菜单键——弹出对话框——选择——退出——是
3、还有一种方法是在,非软件界面(手机桌面状态)——长按菜单键——弹出所有运行软件的图标——按住要退出的软件——向右拖移即可
E. 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();
}
}
F. android,怎么判断最后一个activity,退出程序给提示
android,判断最后一个activity可以用以下方法:
在Activity的方法中, 有一个方法isTaskRoot()方法, 这个方法可以判宴知断当前Activity是否是最后一个Activity, 如果是, 用户再按一次返回就退出当前应用, 否则回到瞎告上一个仍然活动的Activity。具体的操作步骤如下:
1、为每个Activity创建晌神消基类BaseActivity,使得每个Activity都是继承于基本的BaseActivity的。
2、复写BaseActivity的finish方法,在方法中调用isTaskRoot()判断是否是最后一个Activity,如果是给出提示。
以下给出相关重要部分代码:
publicclass BaseActivity extends Activity{
@Override
public void finish() {
super.finish();
if(isTaskRoot()){
Toast.makeText(this,"已经退出程序",Toast.LENGTH_LONG).show();
}
}
}