2

我想我需要在我的onStop方法中添加一些代码。它与仅在活动发生时才应运行的服务有关finished()

但是当用户linkify在网络浏览器上跟随一些'd文本,或者当用户按下主屏幕时,两者都会调用onStop()但这些都不会结束活动,我不想在用户点击链接时结束活动,所以我不能放入finish()onStop()除非我可以检测并区分这种情况何时发生onStop()

有没有一种方法可以覆盖Linkify(),以便我可以在其中添加一个标志,或者让它运行startActivityforResult(),以便我可以在结果中返回信息?

同样,有没有办法可以将活动设置为finish()用户按下主页按钮时?

谢谢

4

2 回答 2

1

您是否可以签isFinishing()onStop()以决定是否需要运行与服务相关的代码?

@Override
protected void onStop() {
    super.onStop();

    if (isFinishing()) {
        // Your service-related code here that should only run if finish() 
        // was called.
    }
}

更新:(更好地理解问题后)

与我在另一个问题上建议的方法非常相似,如果是这种情况,您可能可以覆盖startActivity()以在链接启动时进行拦截并设置您的标志。

@Override
public void startActivity(Intent intent) {
    final String action = intent.getAction();
    if (action.equals(Intent.ACTION_VIEW)) { 
        // maybe also check if getScheme() is 'http' then set our flag
        persist.saveToPrefs("linkifyClick", true);
    }

    // proceed with normal handling by the framework
    super.startActivity(intent);
}

另一个答案还显示了startActivityForResult()如果您愿意,您也可以打电话。

于 2013-01-11T04:25:50.660 回答
0

解决方案(仍然存在问题)

onClick:我在 xml 中的 textView 上放置了一个属性

<TextView
        android:id="@+id/body"
        android:paddingTop="10dp"
        android:onClick="onTextViewClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />

然后在该新方法中的我的共享首选项中保存了一个标志

public void onTextViewClick(View v){

    //write to sharedpreferences
    persist.saveToPrefs("linkifyClick", true);
}

然后在我的 onStop 中,我可以检测到该标志是否已设置!

 @Override
public void onStop(){
    super.onStop();



    if(persist.getFromPrefs("linkifyClick", false) == false)
    {
        finish();
    }
    else
        persist.saveToPrefs("linkifyClick", false); //if it was true, then set to false
}

问题

可以在不接触实际链接部分的情况下单击链接文本。这将标志设置为true并且仍然混淆了我想要的生命周期。所以我需要能够检测到何时按下主页按钮

更新:这有助于澄清另一张海报的问题(带有已接受的答案),该人更新了答案,我在将其放入我的代码后接受了它。有用。

于 2013-01-11T04:30:45.907 回答