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();
}
}
}