0、Android彻底退出引用程序的方法

1) Dalvik VM的本地方法

    android.os.Process.killProcess(android.os.Process.myPid()); // 获取PID    System.exit(0); // 常规java的标准退出法,返回值为0代表正常退出 

2)任务管理器方法

首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限

   // 获取ActivityManager实例    ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);    am.restartPackage(getPackageName());
系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上权限声明:

  <!-- 权限声明 -->  <uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>

3) 根据Activity的声明周期

我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。

在A窗口中使用下面的代码调用B窗口

    Intent intent = new Intent();    intent.setClass(Android123.this, CWJ.class);    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //注意本行的FLAG设置    startActivity(intent);

接下来在B窗口中需要退出时直接使用finish方法即可全部退出。

4)使用SingleTask模式

将主Activity(记为MainActivity)设置为SingleTask模式,需要退出程序时,可以先跳转到MainActivity,然后调用finish函数退出程序。

5)将所有Activity注册一个接收finish消息的广播

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    IntentFilter filter = new IntentFilter();    filter.addAction("finish");    registerReceiver(mFinishReceiver, filter);    ……}private BroadcastReceiver mFinishReceiver = new BroadcastReceiver() {    @Override    public void onReceive(Context context, Intent intent) {        if ("finish".equals(intent.getAction())) {            finish();        }    }};

6)自定义一个Activity栈,道理同上,不过利用一个单例模式的Activity栈来管理所有Activity,并添加提供了能够退出所有Activity的方法。代码如下:

public class ScreenManager {    private static Stack<Activity> activityStack;    private static ScreenManager instance;    private ScreenManager() {    }    public static ScreenManager getScreenManager() {        if (instance == null) {            instance = new ScreenManager();        }        return instance;    }    // 退出栈顶Activity    public void popActivity(Activity activity) {        if (activity != null) {            activity.finish();            activityStack.remove(activity);            activity = null;        }    }     // 获得当前栈顶Activity    public Activity currentActivity() {        Activity activity = activityStack.lastElement();        return activity;    }     // 将当前Activity推入栈中    public void pushActivity(Activity activity) {        if (activityStack == null) {            activityStack = new Stack<Activity>();        }        activityStack.add(activity);    }       // 退出栈中所有Activity    public void popAllActivityExceptOne(Class cls) {        while (true) {            Activity activity = currentActivity();            if (activity == null) {                break;            }            if (activity.getClass().equals(cls)) {                break;            }            popActivity(activity);        }    }}

引申:按两次返回键退出程序:
    //监听返回键,点击两次退出    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            onBackCodePressed();        }        return false;    }       private int mPressedTime = 0;    private void onBackCodePressed() {        // 表示第一次点击        if(mPressedTime == 0){            Toast.makeText(this, "连续点击退出程序 ", Toast.LENGTH_SHORT).show();            ++mPressedTime;                       new Thread(){                @Override                public void run() {                    try {                        sleep(2000);                    } catch (Exception e) {                        Log.e(TAG, e.toString());                    } finally {                        mPressedTime = 0;                    }                }            };        } else {            android.os.Process.killProcess(android.os.Process.myPid());        }    }

1、绘制边框
<?xml version="1.0"encoding="utf-8"?><!-- 绘制边框 --><layer-list xmlns:android="http://schemas.android.com/apk/res/android">     <item android:right="0dp">        <shape android:shape="rectangle">            <solid android:color="@color/white"/>        </shape>    </item>    <item        android:bottom="1dp"        android:left="1dp"        android:right="1dp"        android:top="1dp">        <shape android:shape="rectangle">            <solid android:color="@color/orchid"/>        </shape>    </item> </layer-list>

2、在Android中判断字符串是否为null,或者字符串是否为空串,可以直接使用

TextUtils.isEmpty(str);

TextUtils.isEmpty源码:

public static boolean isEmpty(CharSequence str) {    if (str == null || str.length() == 0)        return true;    else        return false;}

3、判断横屏竖屏并进行切换:
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){    setContentView(R.layout.横屏);}else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {    setContentView(R.layout.竖屏);}

4、替代重复的findViewbyId书写:
   public <T> T $(int viewID) {        return (T) findViewById(viewID);    }

使用实例:
    TextView a;    a = $(R.id.a_id);

5、获取系统当前时间并格式化 方法一:
        SimpleDateFormat formatter = new SimpleDateFormat(                "yyyy年MM月dd日   HH:mm:ss");        Date curDate = new Date(System.currentTimeMillis());// 获取当前时间        String str = formatter.format(curDate);

方法二:
    String label = DateUtils.formatDateTime(             getApplicationContext(),             System.currentTimeMillis(),             DateUtils.FORMAT_SHOW_TIME                     | DateUtils.FORMAT_SHOW_DATE                     | DateUtils.FORMAT_ABBREV_ALL);


6、获得一个字符串(包括中文字符串)首字母的英文字母:
private final static int[] li_SecPosValue = { 1601, 1637, 1833, 2078, 2274,        2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858,        4027, 4086, 4390, 4558, 4684, 4925, 5249, 5590 };private final static String[] lc_FirstLetter = { "A", "B", "C", "D", "E",        "F", "G", "H", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S",        "T", "W", "X", "Y", "Z" };// 获得每个string的首字母/** * 取得给定汉字的首字母,即声母 * @param chinese 给定的汉字 * @return 给定汉字的声母 */public String getFirstLetter(String chinese) {    if (chinese == null || chinese.trim().length() == 0) {        return "";    }    chinese = this.conversionStr(chinese, "GB2312", "ISO8859-1");    if (chinese.length() > 1) { // 判断是不是汉字        int li_SectorCode = (int) chinese.charAt(0); // 汉字区码        int li_PositionCode = (int) chinese.charAt(1); // 汉字位码        li_SectorCode = li_SectorCode - 160;        li_PositionCode = li_PositionCode - 160;        int li_SecPosCode = li_SectorCode * 100 + li_PositionCode; // 汉字区位码        if (li_SecPosCode > 1600 && li_SecPosCode < 5590) {            for (int i = 0; i < 23; i++) {                if (li_SecPosCode >= li_SecPosValue[i]                        && li_SecPosCode < li_SecPosValue[i + 1]) {                    chinese = lc_FirstLetter[i];                    break;                }            }        } else { // 非汉字字符,如图形符号或ASCII码            chinese = this.conversionStr(chinese, "ISO8859-1", "GB2312");            chinese = chinese.substring(0, 1);        }    }    return chinese;}/** * 字符串编码转换 * @param str 要转换编码的字符串 * @param charsetName 原来的编码 * @param toCharsetName 转换后的编码 * @return 经过编码转换后的字符串 */private String conversionStr(String str, String charsetName,String toCharsetName) {    try {        str = new String(str.getBytes(charsetName), toCharsetName);    } catch (UnsupportedEncodingException ex) {        System.out.println("字符串编码转换异常:" + ex.getMessage());    }    return str;}

7、中文字母按字典序排序:
private ArrayList<String> mItems;Collections.sort(mItems, Collator.getInstance(java.util.Locale.CHINA)); // 排序

8、检查WIFI是否开启、连接:
    //是否连接WIFI    public static boolean isWifiConnected(Context context)    {        ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);        NetworkInfo wifiNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);        return wifiNetworkInfo.isConnected();    }    /**** 打开WIFI***/    public static boolean openWifi(Context context){        return opclWifi(context, true);    }       /**** 关闭WIFI***/    public static boolean closeWifi(Context context){        return opclWifi(context, false);    }       /**** 打开关闭WIFI****/    private static boolean opclWifi(Context context, boolean type){        boolean result = true;        // 获取WIFIManager实例        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);           if (wifiManager.isWifiEnabled() ^ type) {             // 打开关闭WIFI             result = wifiManager.setWifiEnabled(type);        }           return result;    }

添加权限:

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

9、int数据转化成十六进制,二进制,八进制,无符号数字符串:

    public static void printInt(int i) {    System.out.println(Integer.toBinaryString(i));   // 二进制输出    System.out.println(Integer.toHexString(i));      // 十六进制输出    System.out.println(Integer.toOctalString(i));    // 八进制输出    System.out.println(Integer.toUnsignedString(i)); // 转化成无符号数输出    System.out.println(Integer.toString(i));         // 转化成String输出    }
测试:

    System.out.println("======== 输出正数 =========");        int i = 100;        printInt(i);        System.out.println("======== 输出负 =========");        i = -100;        printInt(i);
输出结果:

======== 输出正数 =========110010064144100100======== 输出负 =========11111111111111111111111110011100ffffff9c377777776344294967196-100

更多相关文章

  1. Android利用activity启动模式退出整个应用
  2. Android通过HttpURLConnection获取JSON并进行UI更新
  3. android 退出应用优雅的方式(新加一种)
  4. Android.text.TextUtils类
  5. Android(安卓)基于BaseActivity封装
  6. android 如何做到完全退出应用程序
  7. Android控件的一般属性
  8. Value xxx of type org.json.JSONObject cannot be converted to
  9. Android退出多个activity和单个activity的方法

随机推荐

  1. 关于Android intent的知识 隐式意图和显
  2. 源码解析Android中View的measure量算过程
  3. android 上传项目到Github
  4. [置顶] Android 内存泄漏
  5. 从CM刷机过程和原理分析Android系统结构
  6. android 监听网络状态的变化及实战
  7. Android(4.2) Sensors 学习——G-sensor,
  8. Android练习项目 Mp3播放器实现(一)
  9. Android Studio 基础 之 一键快速实现一
  10. Android中自定义ListView无法响应OnItemC