当前位置: 代码迷 >> Android >> Android小技艺总结1
  详细解决方案

Android小技艺总结1

热度:45   发布时间:2016-04-27 23:20:42.0
Android小技巧总结1

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)自定义一个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、检查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;    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案