(二)僅僅通過Application監聽使用者行為及App的線上狀態和線上時間長度

來源:互聯網
上載者:User

標籤:.repo   圖片   方法   register   ali   androi   content   end   text   

  先要實現功能,還是先從API去找。看看有沒有你想要的。這裡其實就是監聽App內activity的狀態。怎麼辦?

  給個API所在地址:http://www.android-doc.com/reference/android/app/Application.html

  

看到沒?這裡有個方法registerActivityLifecycleCallbacks ,這不是監聽嗎?看看回調了啥東西,點進去再看看。

我去,這服務不要太好呀。要啥有啥。看到沒?所有activity的生命週期都能擷取到。所以。怎麼用就成了改考慮的問題了。

下面是我做的統計活躍量和時間長度的

import android.app.Activity;import android.app.Application;import android.content.Context;import android.os.Bundle;import android.util.Log;import java.util.HashMap;import java.util.Map;/** * Created by admin on 2018/3/2. * @author  cxx * note: 根據activity的生命週期來判斷使用者的操作。在兩種情況下結束app計時統計。 * 一種是:當處於棧頂或頂層的activity被掛起,要強制殺掉進程的時候。 * 二種是:當使用者逐層退回到最底層的activity,並finish的時候。即:清空activity棧結束app */public class TimeRecord {    private boolean isAppAlive = true;  //判斷app計時是否已經結束,如果結束,但是app並沒有被殺掉,用此欄位複活計時功能    private boolean isSwitchActivity = false;    private boolean isAppExit = false;    private String topActivity ;    private MetaClass helper ;    private Map<String ,String> map = new HashMap<>();    private long timeStart =0;   //開始計時的時間戳記    private String TAG = "cxx";    public void init(final Context context,MetaClass metaClass){        Application application  = (Application)context.getApplicationContext();        //上報活躍量       System.out.println(TAG+"上報活躍量——初始化");        this.helper = metaClass;        helper.reportActive();        timeStart = System.currentTimeMillis()/1000;       System.out.println(TAG+"開始計時——初始化"+timeStart);        application.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {            @Override            public void onActivityCreated(Activity activity, Bundle bundle) {                topActivity = activity.getClass().getSimpleName();                map.put(topActivity,topActivity);                isAppAlive = true;                isSwitchActivity = false;               System.out.println(TAG+"Created_activity:"+activity.getClass().getSimpleName());            }            @Override            public void onActivityStarted(Activity activity) {               System.out.println(TAG+"Started_activity:"+activity.getClass().getSimpleName());            }            @Override            public void onActivityResumed(Activity activity) {               System.out.println(TAG+"Resumed_activity:"+activity.getClass().getSimpleName());                if(!activity.getClass().getSimpleName().equals(topActivity)){                    isSwitchActivity = true;                }else{                    isSwitchActivity = false;                }                topActivity=activity.getClass().getSimpleName();                if(!isAppAlive||isAppExit){                    isAppExit = false;                   System.out.println(TAG+"上報活躍量——onResumed");                    helper.reportActive();                    timeStart = System.currentTimeMillis()/1000;                   System.out.println(TAG+"開始計時——onResumed"+timeStart);                    isAppAlive = true;                }            }            @Override            public void onActivityPaused(Activity activity) {            }            @Override            public void onActivityStopped(Activity activity) {               System.out.println(TAG+"stop_activity:"+activity.getClass().getSimpleName());               System.out.println(TAG+"stop_topActivity:"+topActivity);                if(topActivity.equals(activity.getClass().getSimpleName())){                    if(!isSwitchActivity){                        long timeEnd = System.currentTimeMillis()/1000;                        if(helper!=null){                            long timegap = timeEnd-timeStart;                            String onlineTime = String.valueOf(timegap);                           System.out.println(TAG+"計時結束——stopped:"+timeEnd);                           System.out.println(TAG+"計時結束時間長度——stopped:"+onlineTime);                            helper.reportOnline(onlineTime);                        }                        isAppAlive=false;                    }                }            }            @Override            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {            }            @Override            public void onActivityDestroyed(Activity activity) {                map.remove(activity.getClass().getSimpleName());                if(map.size()==0&&isAppAlive){                    long timeEnd = System.currentTimeMillis()/1000;                    if(helper!=null){                        long timegap = timeEnd-timeStart;                        String onlineTime = String.valueOf(timegap);                       System.out.println(TAG+"計時結束——destory:"+timeEnd);                       System.out.println(TAG+"計時結束時間長度——destory:"+onlineTime);                        helper.reportOnline(onlineTime);                    }                    isAppAlive = false;                }                if(map.size() ==0){                    isAppExit = true;                }            }        });    }}

 

(二)僅僅通過Application監聽使用者行為及App的線上狀態和線上時間長度

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.