A. 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();
}
}
B. 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();
}
}
}
C. 如何判斷一個Android應用程序轉到後台並回到前台
按返回或Home鍵退出應用程序的界面時,應用程序會在後台被掛起。這么設計的好處是,由於應用被系統緩存在內存中,那麼在用戶打開啟動應用時就可以通過調用緩存,快速啟動應用。當然,由於當今內存和處理器能力的限制,系統會自動關閉一些進程。那麼我如何判斷這個應用程序在前台還是後台,應用從後台回到前台了?看到一般都是runningProcess或者runningTasks來判斷應用在前台還是後台事實上,Android在SDK 14的時候提供了一個Callback。ActivityLifecycleCallbacks,你可以通過這個Callback拿到App所有Activity的生命周期回調。
public class Application extends android.app.Application {
private int activityCount;//activity的count數
private boolean isForeground;//是否在前台
@Override public void onCreate() {
super.onCreate();
(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override public void onActivityStarted(Activity activity) {
activityCount++;
} @Override
public void onActivityResumed(Activity activity) {
} @Override
public void onActivityPaused(Activity activity) {
} @Override
public void onActivityStopped(Activity activity) {
activityCount--; if(0==activityCount){
isForeground=false; }
} @Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
} @Override
public void onActivityDestroyed(Activity activity) {
} }); } }
這個Callback寫在Application里的,你可以在Application初始化的時候來注冊。通過這些回調我們可以將這個計數放在onStart()和onStop()中去。activityCount==1,那麼就是前台,activityCount==0,那就是後台。這樣判斷很很簡單了吧。
public abstract class BaseClass extends AppCompatActivity {
判斷當前的應用程序是不是在運行
//需要申請GETTask許可權
private boolean () {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(getPackageName())) {
return true; } } return false; }
public boolean wasBackground= false; //聲明一個布爾變數,記錄當前的活動背景
@Override public void onPause(){
super.onPause();
if(())
wasBackground= true; }
public void onResume(){
super.onResume();
if(wasBackground){//
Log.e("aa","從後台回到前台"); } wasBackground= false; }}
D. 安卓app去除強制更新彈窗代碼
首先,先了解上面的信息,這些信息我們統稱為「注入"。
意思是:注入代碼到我們需要的軟體中。
看右邊的圖片,這是一款安卓應用注入器,也是今天的主角,現在看的話,是一片空白,因為我們還沒加入我們想要注入的應用程序。
(第一次進入會有應用功能介紹)