【问题标题】:How to handle too much Activites in Android?如何在 Android 中处理过多的 Activity?
【发布时间】:2012-01-03 04:14:40
【问题描述】:

我正在使用 VideoView 在我的应用中播放视频,因此我需要为每个视频创建大量活动。我的问题是,有没有办法处理这个?因为到目前为止我已经创建了 100 多个活动。我不希望我的应用因为太多的活动而变得太大。

【问题讨论】:

  • 为什么要为每个视频创建活动。只需传递链接并在活动中使用一个视频视图并导航视频“下一个”/“上一个”。
  • 你有这方面的教程吗?
  • Leon,无意冒犯,但基于这个问题,很明显你还没有准备好编写商业级软件。向 Android 市场发布另一个半功能的、实施得非常糟糕、漏洞百出的应用程序并没有给任何人带来任何好处。请考虑花必要的时间来学习如何在 Android 和 Java 中正确地进行架构设计。鉴于您所描述的内容,您的应用听起来最多应该是 2 或 3 个活动(如果布局合理,1 个可能就足够了)。
  • Dr.Dredel,无意冒犯,但您甚至无法自己找到解决方案,但您告诉我“最多 2 或 3 次活动(如果您躺着,1 次可能就足够了)它正确)”这就是为什么我问这样我可以学习。
  • 另外,我还没有发布任何应用程序,我只是在学习

标签: android video android-activity android-videoview


【解决方案1】:

好吧,老实说,大多数开发人员必须在功能和低内存占用之间进行权衡。最好的实现是牢记各种活动状态。阅读它here

这是你能做到的最好的事情。当其他活动应用需要资源时,Android 将始终“杀死”在后台运行的活动。

【讨论】:

  • 所以你是说没办法?
  • 一点也不。正确管理活动状态通常可以完成。
  • “管理活动状态”是什么意思?
  • 您是否阅读了该链接中的页面?您会发现主题标题下涵盖了这些内容:“活动生命周期”
  • 这可能有助于“杀死”活动,但它无助于使我的应用在尺寸方面更小,这是我的主要问题,你有点跑题了
【解决方案2】:

这是在单个活动中导航下一个/上一个视频的代码。喜欢播放列表。

public class Test11Activity extends Activity {
private int currentVideo=0;
ArrayList<String> httpLinkArrayList = new ArrayList<String>();
 VideoView videoView;
 Button n_button;
 Button p_button;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    httpLinkArrayList.add("http://abb.mp4");
    httpLinkArrayList.add("http://abb1.mp4");
    httpLinkArrayList.add("http://abb2.mp4");
    httpLinkArrayList.add("http://abb3.mp4");
    httpLinkArrayList.add("http://abb4.mp4");


    LinearLayout mainlayout = new LinearLayout(this);

mainlayout.setOrientation(LinearLayout.VERTICAL); 线性布局 n_p_layout = new LinearLayout(this);

    n_button = new Button(this);
    n_button.setText("Next");
    n_button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub              
            if(currentVideo<httpLinkArrayList.size()){
                currentVideo++;
                videoView.setVideoURI(Uri.parse(httpLinkArrayList.get(currentVideo)));
                videoView.start();
            }
        }
    });
    p_button = new Button(this);
    p_button.setText("Previous");
    p_button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub              
            if(currentVideo>0){
                currentVideo--;
                videoView.setVideoURI(Uri.parse(httpLinkArrayList.get(currentVideo)));
                videoView.start();
            }
        }
    });
    n_p_layout.addView(n_button);
    n_p_layout.addView(p_button);        

    videoView = new VideoView(this);
    videoView.setVideoURI(Uri.parse(httpLinkArrayList.get(currentVideo)));
    videoView.start();
    videoView.setOnCompletionListener(new OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer arg0) {
            // TODO Auto-generated method stub              
            if(currentVideo<httpLinkArrayList.size()){
                                    currentVideo++;
                videoView.setVideoURI(Uri.parse(httpLinkArrayList.get(currentVideo)));
                videoView.start();
            }
        }
    });

    mainlayout.addView(n_p_layout);
    mainlayout.addView(videoView);

    setContentView(mainlayout);
}  

}

希望对你有用。:)

【讨论】:

  • mainlayout 是简单的线性布局。您可以根据需要设置其属性。
  • 怎么没有控件?
  • 检查现在编辑的代码。只是缺少 mainlayout 方向 vertical.mainlayout 包含下一个前一个控件和视频视图。
【解决方案3】:

【讨论】:

  • 他将很难在视图鳍状肢中进行 100 多项活动。 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多