小编Joh*_*ock的帖子

在RxJava上使用Android上的干净MVP:如何在仍然观察UI线程的同时保持演示者没有任何Android知识?

为了在Android上使用mvp模式实现"干净"架构,建议将android框架视为插件,而不是将任何知识产权感知依赖项泄漏到演示者层.使用rxjava,如果我有一个用于将数据"推送"到视图层的演示者,我可能希望有这样的逻辑:

public interface SearchPresenter {

  interface ViewLayer {
  void updateResults(List<SearchResult> searchResults)
  }
  void bind(ViewLayer viewLayer);
  void unbind();
}

public class SearchPresenterImpl implements SearchPresenter {

   ViewLayer viewLayer;
   CompositeDisposable compositeDisposable;

    @Override
    public void bind(ViewLayer viewLayer) {
      this.viewLayer = viewLayer;

      compositeDisposable = new CompositeDisposable();
      compositeDisposable.add(
            searchInteractor.getSearchResults()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(this::refreshView));

}

private void refreshView(List<SearchResult> searchResults) {
    //send the results back to the view layer to update a RecyclerView      
    viewLayer.updateResults(searchResults)
}

@Override
public void unbind() {
    compositeDisposable.dispose();
}
Run Code Online (Sandbox Code Playgroud)

但是,通过观察'AndroidSchedulers.mainThread()',这会强制依赖于:

import io.reactivex.android.schedulers.AndroidSchedulers
Run Code Online (Sandbox Code Playgroud)

在这一点上,我的主持人现在知道android并且与之相关; 我想避免.

处理这个的建议方法是什么,以保证结果在Android的UI(主)线程上传递给ViewLayer,而演示者维护没有任何与Android相关的依赖?

android rx-java clean-architecture android-mvp

4
推荐指数
1
解决办法
1027
查看次数

如果我的应用程序中没有其他活动在运行,如何停止Android服务?

有没有办法可以测试我的应用程序中还有其他活动是否还活着?我希望在onDestroy方法中停止服务,但是如果我的应用程序中没有其他活动在堆栈上仍然存在,则只想这样做.

我有调用停止主活动的onDestroy()方法中的服务.除了如果用户启动我的应用程序,然后在我的应用程序中启动一些活动,然后点击主屏幕和RELAUNCHES我的应用程序,它们将颠覆我的订单,主要活动现在将高于我的应用程序的其他活动之外,这是完美的.从这种状态,如果他们点击后退按钮并"退出"我的主屏幕,他们将触发onDestroy()方法并终止服务,即使堆栈上还有其他活动打开.我想通过停止服务来避免这种情况,如果我确定我的其他活动没有在堆栈上打开.可能?

android android-service

3
推荐指数
1
解决办法
1万
查看次数

如何限制Android应用程序的堆栈上相同活动的数量

这在Android应用程序中是否可行?我想做到这一点,无论用户多少次开始活动A,当他们点击后退按钮时,他们将永远不会出现多次活动A.

我在当前代码中发现的是我只有两个选项:1.我可以在activityA中调用finish(),这将阻止它完全通过后退按钮访问,或2.我不调用finish(),然后,如果用户在使用期间开始活动A(n)次,则在按下后退按钮时将有(n)个实例.

同样,我希望通过按下后退按钮来访问activityA,但没有理由在堆栈上保留同一活动的多个实例.有没有办法将队列中活动的实例数限制为1?

android

3
推荐指数
1
解决办法
2861
查看次数

Android:即使视图滚动,如何将广告对齐到屏幕底部?

我之前曾问过一个我仍然无法解决的问题:

http://stackoverflow.com/questions/3126347/android-relativelayout-how-to-alignparentbottom-when-wrapped-in-a-scrollview
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用RelativeLayout或LinearLayout将视图对齐到屏幕底部,然后将该布局包装在滚动视图中以允许在必要时滚动(对于横向方向或小屏幕设备的更改).

到目前为止,我发现任何与父底部对齐的东西都可以很好地工作,只要底部是可见的......但如果底部位于滚动下方,则父母底部对齐的视图会跳到顶部.

对于出现在底部的广告来说,这似乎是一种非常常见的设计,所以我认为这是可能的.是吗?

android

3
推荐指数
1
解决办法
4926
查看次数

无法在Android API 1.5上使用SAX解析器(javax.xml.parsers.SAXParser)解析引号

使用SAX解析器时,如果节点内容中存在"解析",则解析失败.如何解决此问题?我是否需要转换所有字符?

换句话说,任何时候我在节点中都有引号:

 <node>characters in node containing "quotes"</node>
Run Code Online (Sandbox Code Playgroud)

当Handler解析它时,该节点被屠宰成多个字符数组.这是正常的行为吗?引号为什么会引起这样的问题?

这是我正在使用的代码:

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

 ...


HttpGet httpget = new HttpGet(GATEWAY_URL + "/"+ question.getId());
          httpget.setHeader("User-Agent", PayloadService.userAgent);
          httpget.setHeader("Content-Type", "application/xml");

          HttpResponse response = PayloadService.getHttpclient().execute(httpget);
          HttpEntity entity = response.getEntity();

          if(entity != null)
          {        
              SAXParserFactory spf = SAXParserFactory.newInstance();
              SAXParser sp = spf.newSAXParser();            
              XMLReader xr = sp.getXMLReader();            

              ConvoHandler convoHandler = new ConvoHandler();
              xr.setContentHandler(convoHandler);             
              xr.parse(new InputSource(entity.getContent()));                                


              entity.consumeContent();         

               messageList = convoHandler.getMessageList();


          }
Run Code Online (Sandbox Code Playgroud)

android saxparser

1
推荐指数
1
解决办法
2658
查看次数

IPhone - Objective C - 如何在多个线程中共享外部变量?

在一个iPhone应用程序中,我创建了一个常量文件来保存我的全局变量:

MyConstants.h
extern NSMutableString * MY_GATEWAY;


MyConstants.m
NSMutableString * MY_GATEWAY;
Run Code Online (Sandbox Code Playgroud)

在我的app委托中,我导入了MyConstants.h,并且可以成功附加到MY_GATEWAY并使用以下URL来初始化我的全局变量:

 MY_GATEWAY = [NSMutableString stringWithString:MY_PROTOCOL];
[MY_GATEWAY appendString:MY_HOST];
Run Code Online (Sandbox Code Playgroud)

从我的app delegate,在初始化MY_GATEWAY后,我启动了一个新线程.我的线程类也导入MyConstants.h,在该线程的主循环中我尝试读取MY_GATEWAY,但值为garbage:

2011-08-13 22:23:47.246 MyProject[930:5c03] da.lproj
Run Code Online (Sandbox Code Playgroud)

我是否应该能够从辅助线程中读取此变量?如果是这样,我做错了什么?

iphone objective-c

1
推荐指数
1
解决办法
164
查看次数