Skip to main content
Version: 1.0.0

Track Feature Failures in Android Apps

Type: 7 | Default Severity: Major

Appxiom SDK enables you to track feature failures in your Android app by monitoring the execution of chained functions within a single app session. This helps you detect when a critical feature, such as Add to Cart does not complete as expected, allowing you to quickly identify and resolve reliability issues.

Overview of Feature Failure Tracking

What is Feature Failure Tracking?

  • Chained Function Monitoring: Track the execution of two related functions that together define the start and end of a feature.
  • Automatic Issue Reporting: If the second function in the chain is not executed within the expected time, an issue is automatically reported.
  • Customizable Timing: Set the expected time window for chained execution using the expectedChainedExecutionTime field in the annotation.

Benefits

  • Detect and diagnose incomplete or failed feature flows
  • Improve app reliability and user experience
  • Gain visibility into real-world feature performance
  • Works with any feature that can be represented by chained function calls

Step 1: Identify Feature Functions

Choose the functions that represent the start and end of a feature (e.g., addItemToCart and onItemAddedToCart).

Step 2: Annotate and Chain Functions

  • Annotate both functions with @AX.
  • In the first function, use nextFunctionId and nextFunctionClass to point to the second function.
  • Set expectedChainedExecutionTime to define the maximum allowed time between executions (default: 2000 ms).

Step 3: Use Ax.start() and Ax.end()

Wrap both the functions with Ax.start() and Ax.end() and annotate with @AX to enable tracking.

public class ProductListingActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_listing);
addToCartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addItemToCart(item.getId());
}
});
}

// 'onItemAddedToCart' is expected to be called within 5000 ms.
@AX(nextFunctionId = "onItemAddedToCart",
nextFunctionClass = ProductListingActivity.class,
expectedChainedExecutionTime = 5000)
public boolean addItemToCart(String itemId){
Ax.start(new Object(){}, itemId);
if(isValid(itemId)){
...
...
return true;
}
return Ax.end(new Object(){}, false);
}

@Override
public void onApiCallComplete(JSONObject response){
if(validResponse(response)){
onItemAddedToCart(response.getString("id"));
}
}

@AX
public void onItemAddedToCart(String itemId){
Ax.start(new Object(){}, itemId);
showMessage(Messages.CARTED_SUCCESS);
Ax.end(new Object(){});
}
}

Key Points to Remember

  1. Both functions must be annotated with @AX.
  2. Chain the functions using nextFunctionId and nextFunctionClass in the first function.
  3. expectedChainedExecutionTime sets the allowed time window (default: 2000 ms).
  4. Use Ax.start() and Ax.end() in both functions to wrap the logic for tracking.

@AX Annotation Fields

  • nextFunctionId: Name/ID of the second function to chain.
  • nextFunctionClass: Class where the second function is defined.
  • expectedChainedExecutionTime: Maximum time (ms) allowed between executions before an issue is reported.

Best Practices

  • Use feature tracking for critical flows (e.g., checkout, login, payments).
  • Set realistic expectedChainedExecutionTime values based on real user scenarios.
  • Regularly review reported issues to improve feature reliability.
  • Document all tracked features for your QA and development teams.

Frequently Asked Questions (FAQ)

Q: What is feature failure tracking?
A: It monitors the execution of chained functions representing a feature and reports if the expected flow is not completed in time.

Q: Can I track any feature in my app?
A: Yes, as long as the feature can be represented by two chained functions.

Q: What happens if the second function is not called in time?
A: The SDK will automatically report a feature failure issue to the Appxiom dashboard.

Q: Do both functions need to be annotated with @AX?
A: Yes, both the start and end functions must be annotated for tracking to work.

Q: Can I set a custom time window for chained execution?
A: Yes, use the expectedChainedExecutionTime field in the annotation.

Q: Why is my feature failure not being reported?
A: Ensure both functions are properly annotated, chained, and wrapped with Ax.start() and Ax.end().