032android初級篇之Timer的使用及獲取棧頂包名

測試代碼

這段代碼的主要功能是使用Timer 定時更新計數。

public class TestTimerActivity extends Activity{
    private  final static String TAG=TestTimerActivity.class.getSimpleName();

    private Timer mWaitTimer;
    private Handler mHandler;
    private TextView mTextView;
    private int mTimes;

    @Override
    protected void onCreate(Bundle savedInstanceState ) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test_timer_activity);
        mTextView = (TextView) findViewById(R.id.textView);
        mTextView.setText("TestTimer!");
        mTimes =0;

        mHandler = new Handler() {

            public  void handleMessage(Message msg){
                switch (msg.what){
                    case 1:
                        mTextView.setText(""+mTimes);

                }
                super.handleMessage(msg);
            }
        };

        TimerTask mTimerTask = new TimerTask(){
            @Override
            public void run()
            {
                mTimes++;
                Message msg = new Message();
                msg.what = 1;
                mHandler.sendMessage(msg);
            }
        };
        mWaitTimer = new Timer(true);
        mWaitTimer.schedule(mTimerTask,1000,1000);

    }
}

獲取棧頂信息

android 5.0 之后官方屏蔽了獲取棧頂信息的api,如下的方法在大多數機器上可用:

 public String getTaskPackname() {
    ActivityManager.RunningAppProcessInfo currentInfo = null;
    Field field = null;
    int START_TASK_TO_FRONT = 2;
    String currentApp = "CurrentNULL";
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        try {
            field = ActivityManager.RunningAppProcessInfo.class.getDeclaredField("processState");
        } catch (Exception e) {
            e.printStackTrace();
        }
        ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> appList = am.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo app : appList) {
            if (app.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                Integer state = null;
                try {
                    state = field.getInt(app);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (state != null && state == START_TASK_TO_FRONT) {
                    currentInfo = app;
                    break;
                }
            }
        }
        if (currentInfo != null) {
            currentApp = currentInfo.processName;
        }
    } else {
        ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses();
        currentApp = tasks.get(0).processName;
    }
    // Log.e("TAG", "Current App in foreground is: " + currentApp);
    return currentApp;
}

參考鏈接

  1. Android 計時器Timer用法
  2. Android 監聽網絡狀態+源代碼
  3. Android 5.0(包含5.0以下版本) 獲取棧頂應用程序包名
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容