Skip to content

Commit

Permalink
fix: 业务和配置逻辑分离
Browse files Browse the repository at this point in the history
  • Loading branch information
styluo committed Sep 8, 2021
1 parent 551eded commit 2c6dc5a
Show file tree
Hide file tree
Showing 13 changed files with 95 additions and 81 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public View onCreateView(
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_tab, container, false);
final TextView textView = root.findViewById(R.id.section_label);
mPageViewModel.getText().observe(this, new Observer<String>() {
mPageViewModel.getText().observe(this.getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.growingio.android.sdk.autotrack;

import android.app.Application;
import android.support.annotation.CallSuper;
import android.text.TextUtils;

import com.growingio.android.sdk.track.TrackMainThread;
Expand All @@ -34,6 +35,12 @@ public class CdpAutotracker extends Autotracker {

public CdpAutotracker(Application application) {
super(application);
}

@Override
@CallSuper
protected void setup(Application application) {
super.setup(application);
CdpAutotrackConfig config = ConfigurationProvider.get().getConfiguration(CdpAutotrackConfig.class);
if (config != null) {
TrackMainThread.trackMain().addEventBuildInterceptor(new CdpEventBuildInterceptor(config.getDataSourceId()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import android.app.Application;
import android.text.TextUtils;

import androidx.annotation.CallSuper;

import com.growingio.android.sdk.Tracker;
import com.growingio.android.sdk.track.cdp.CdpEventBuildInterceptor;
import com.growingio.android.sdk.track.cdp.ResourceItem;
Expand All @@ -34,6 +36,12 @@ public class CdpTracker extends Tracker {

public CdpTracker(Application application) {
super(application);
}

@Override
@CallSuper
protected void setup(Application application) {
super.setup(application);
CdpConfig cdpConfig = ConfigurationProvider.get().getConfiguration(CdpConfig.class);
if (cdpConfig != null) {
TrackMainThread.trackMain().addEventBuildInterceptor(new CdpEventBuildInterceptor(cdpConfig.getDataSourceId()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import android.app.Activity;
import android.app.Application;
import android.app.Fragment;
import android.support.annotation.CallSuper;
import android.text.TextUtils;
import android.view.View;

Expand All @@ -40,13 +41,16 @@ public class Autotracker extends Tracker {

public Autotracker(Application application) {
super(application);
if (application == null) {
return;
}
PageProvider.get().start();
}

@Override
@CallSuper
protected void setup(Application application) {
super.setup(application);
PageProvider.get().setup();
ViewChangeProvider mViewChangeProvider;
mViewChangeProvider = new ViewChangeProvider();
mViewChangeProvider.start();
mViewChangeProvider.setup();

TrackerContext.initSuccess();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public class ViewChangeProvider implements IActivityLifecycle, OnViewStateChange
public ViewChangeProvider() {
}

public void start() {
public void setup() {
ActivityStateProvider.get().registerActivityLifecycleListener(this);
ViewTreeStatusProvider.get().register(this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public static PageProvider get() {
return SingleInstance.INSTANCE;
}

public void start() {
public void setup() {
ActivityStateProvider.get().registerActivityLifecycleListener(this);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public void setup() {
application.registerActivityLifecycleCallbacks(ActivityStateProvider.get());
TrackerContext.init(application);
TrackerContext.initSuccess();
PageProvider.get().start();
PageProvider.get().setup();
SessionProvider.get();
activityController = Robolectric.buildActivity(RobolectricActivity.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.CallSuper;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
Expand Down Expand Up @@ -56,28 +57,32 @@ public Tracker(Application application) {
Logger.e(TAG, "GrowingIO Track SDK is UNINITIALIZED, please initialized before use API");
return;
}
initTracker(application);
// 配置
setup(application);
// 业务逻辑
start();

isInited = true;
}

private void initTracker(Application application) {
@CallSuper
protected void setup(Application application) {
TrackerContext.init(application);

// init core service
SessionProvider sessionProvider = SessionProvider.get();
TrackMainThread.trackMain().register(sessionProvider);
application.registerActivityLifecycleCallbacks(ActivityStateProvider.get());
DeepLinkProvider.get().init();

loadAnnotationGeneratedModules(application);
}

if (PersistentDataProvider.get().firstInit()) {
sessionProvider.refreshSessionId();
sessionProvider.generateVisit();
PersistentDataProvider.get().setLatestPauseTime(System.currentTimeMillis());
PersistentDataProvider.get().setActivityCount(0);
}

isInited = true;
private void start() {
TrackMainThread.trackMain().postActionToTrackMain(new Runnable() {
@Override
public void run() {
// 判断进程是否是首次启动, 耗时操作放到子线程中执行
PersistentDataProvider.get().start();
}
});
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,12 +106,12 @@ public void run() {
return;
}

// 判断当前事件类型是否被过滤
if (EventExcludeFilter.isEventFilter(eventBuilder.getEventType())) {
return;
}

if (ConfigurationProvider.core().isDataCollectionEnabled()) {
// 判断当前事件类型是否被过滤
if (EventExcludeFilter.isEventFilter(eventBuilder.getEventType())) {
return;
}

if (!PersistentDataProvider.get().isSendVisitAfterRefreshSessionId()) {
SessionProvider.get().generateVisit();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

import androidx.annotation.Nullable;

import com.growingio.android.sdk.track.TrackMainThread;
import com.growingio.android.sdk.track.data.PersistentDataProvider;
import com.growingio.android.sdk.track.events.EventBuildInterceptor;
import com.growingio.android.sdk.track.events.base.BaseEvent;
Expand All @@ -35,22 +34,16 @@ public class CdpEventBuildInterceptor implements EventBuildInterceptor, OnUserId
private static final String KEY_GIO_ID = "GIO_ID";

private final String mDataSourceId;
private String mLatestGioId;

public CdpEventBuildInterceptor(String dataSourceId) {
mDataSourceId = dataSourceId;
UserInfoProvider.get().registerUserIdChangedListener(this);
TrackMainThread.trackMain().postActionToTrackMain(new Runnable() {
@Override
public void run() {
mLatestGioId = getGioId();
}
});
}

@Override
public void eventWillBuild(BaseEvent.BaseBuilder<?> eventBuilder) {
eventBuilder.addExtraParam("dataSourceId", mDataSourceId);
String mLatestGioId = getGioId();
if (!TextUtils.isEmpty(mLatestGioId)) {
eventBuilder.addExtraParam("gioId", mLatestGioId);
}
Expand All @@ -71,10 +64,10 @@ private void setGioId(String gioId) {

@Override
public void onUserIdChanged(@Nullable String newUserId) {
String mLatestGioId = getGioId();
Logger.d(TAG, "onUserIdChanged: newUserId = " + newUserId + ", mLatestGioId = " + mLatestGioId);
if (!TextUtils.isEmpty(newUserId) && !newUserId.equals(mLatestGioId)) {
mLatestGioId = newUserId;
setGioId(mLatestGioId);
setGioId(newUserId);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@
import android.text.TextUtils;

import com.growingio.android.sdk.TrackerContext;
import com.growingio.android.sdk.track.interfaces.TrackThread;
import com.growingio.android.sdk.track.ipc.IDataSharer;
import com.growingio.android.sdk.track.ipc.MultiProcessDataSharer;
import com.growingio.android.sdk.track.ipc.ProcessLock;
import com.growingio.android.sdk.track.log.Logger;
import com.growingio.android.sdk.track.providers.SessionProvider;

import java.util.ArrayList;
import java.util.HashSet;
Expand All @@ -53,8 +55,6 @@ public class PersistentDataProvider {
private final ProcessLock mProcessLock;
private final Context mContext;

private boolean mIsFirstInit;

private static class SingleInstance {
private static final PersistentDataProvider INSTANCE = new PersistentDataProvider();
}
Expand All @@ -63,13 +63,17 @@ private PersistentDataProvider() {
mContext = TrackerContext.get().getApplicationContext();
mDataSharer = new MultiProcessDataSharer(mContext, SHARER_NAME, SHARER_MAX_SIZE);
mProcessLock = new ProcessLock(mContext, PersistentDataProvider.class.getName());
repairPid();
}

public static PersistentDataProvider get() {
return SingleInstance.INSTANCE;
}

@TrackThread
public void start() {
repairPid();
}

public EventSequenceId getAndIncrement(String eventType) {
long globalId = mDataSharer.getAndIncrementLong(KEY_TYPE_GLOBAL, 1L);
long eventTypeId = mDataSharer.getAndIncrementLong(eventType, 1L);
Expand Down Expand Up @@ -152,10 +156,6 @@ public String getString(String key, String defValue) {
return mDataSharer.getString(key, defValue);
}

public boolean firstInit() {
return mIsFirstInit;
}

private void repairPid() {
mProcessLock.lockedRun(new Runnable() {
@Override
Expand All @@ -167,7 +167,15 @@ public void run() {
alivePid.add(pid);
}
}
mIsFirstInit = alivePid.isEmpty();

if (alivePid.isEmpty()) {
SessionProvider.get().refreshSessionId();
SessionProvider.get().generateVisit();
setLatestPauseTime(System.currentTimeMillis());
setActivityCount(0);
setLatestNonNullUserId(getLoginUserId());
}

alivePid.add(Process.myPid());
putAlivePid(alivePid);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,27 +17,22 @@
package com.growingio.android.sdk.track.providers;

import android.app.Activity;
import android.support.annotation.Nullable;
import android.text.TextUtils;

import com.growingio.android.sdk.track.TrackMainThread;
import com.growingio.android.sdk.track.data.PersistentDataProvider;
import com.growingio.android.sdk.track.events.TrackEventGenerator;
import com.growingio.android.sdk.track.interfaces.OnTrackMainInitSDKCallback;
import com.growingio.android.sdk.track.interfaces.TrackThread;
import com.growingio.android.sdk.track.listener.IActivityLifecycle;
import com.growingio.android.sdk.track.listener.OnUserIdChangedListener;
import com.growingio.android.sdk.track.listener.event.ActivityLifecycleEvent;
import com.growingio.android.sdk.track.log.Logger;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class SessionProvider implements IActivityLifecycle, OnUserIdChangedListener, OnTrackMainInitSDKCallback {
public class SessionProvider implements IActivityLifecycle {
private static final String TAG = "SessionProvider";

private String mLatestNonNullUserId;
private final List<String> mActivityList = new ArrayList<>();
private final long mSessionInterval;
private double mLatitude = 0;
Expand Down Expand Up @@ -71,11 +66,13 @@ void checkAndSendVisit(long resumeTime) {
* 2. 后台30s返回后刷新session
* 3. 用户id发生改变刷新session
*/
@TrackThread
public void refreshSessionId() {
PersistentDataProvider.get().setSessionId(UUID.randomUUID().toString());
PersistentDataProvider.get().setSendVisitAfterRefreshSessionId(false);
}

@TrackThread
public void generateVisit() {
if (!ConfigurationProvider.core().isDataCollectionEnabled()) {
return;
Expand Down Expand Up @@ -145,40 +142,11 @@ public void run() {
@Override
public void run() {
PersistentDataProvider.get().setLatestPauseTime(System.currentTimeMillis());
if (!ConfigurationProvider.core().isDataCollectionEnabled()) {
return;
}
TrackEventGenerator.generateAppClosedEvent();
}
});
}
}
}
}

@TrackThread
@Override
public void onTrackMainInitSDK() {
PersistentDataProvider.get().setLatestNonNullUserId(UserInfoProvider.get().getLoginUserId());
UserInfoProvider.get().registerUserIdChangedListener(this);
}

@TrackThread
@Override
public void onUserIdChanged(@Nullable String newUserId) {
mLatestNonNullUserId = PersistentDataProvider.get().getLatestNonNullUserId();
Logger.d(TAG, "onUserIdChanged: newUserId = " + newUserId + ", mLatestNonNullUserId = " + mLatestNonNullUserId);
if (!TextUtils.isEmpty(newUserId)) {
if (TextUtils.isEmpty(mLatestNonNullUserId)) {
generateVisit();
} else {
if (!newUserId.equals(mLatestNonNullUserId)) {
refreshSessionId();
generateVisit();
}
}
mLatestNonNullUserId = newUserId;
PersistentDataProvider.get().setLatestNonNullUserId(mLatestNonNullUserId);
}
}
}
Loading

0 comments on commit 2c6dc5a

Please sign in to comment.