2012-07-16 3 views
0

Im이 빌드 한 앱에 문제가있는 것 같습니다. 메모리 안의 최종 변수가 너무 많아서 안드로이드 2.3 이하에서 테스트 할 때 문제가 없지만 4.0 이상에서는 잠시 후에 충돌합니다. 리스트가 너무 길어진다. 알아 내고자하는 것은 내가 변수를 최종적으로 만들지 못하게 할 수있는 방법이다. 그렇지 않으면 잠재적으로 변수를 null로 만들 수있다. 아래에있는 내 코드는, 어떤 도움 그냥 기본적으로 그래서 당신의 문제는 다른 곳에, 값이 변경되지 않습니다 JVM을 알려줍니다, 먼 길에게 감사Java 및 Android에서 최종 변수를 사용하는 대신?

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi = convertView; 
    final String url = (String) data.get(position).get(4); 
    final String aviUrl = (String) data.get(position).get(2); 
    final Date theTime = (Date) data.get(position).get(3); 
    final String theTweetText = (String) data.get(position).get(1); 
    final String theRealName = (String) data.get(position).get(0); 
    final String theScreenName = (String) data.get(position).get(5); 
    Boolean isRetweeted = (Boolean) data.get(position).get(6); 
    final Long iD = (Long) data.get(position).get(7); 
    final Integer totalTweets = (Integer) data.get(position).get(8); 
    final Integer totalFollowers = (Integer) data.get(position).get(9); 
    final Integer totalFollowing = (Integer) data.get(position).get(10); 
    final Long tweetId = (Long) data.get(position).get(11); 
    Date currentDate = new Date(); 



    if (convertView == null) 
     vi = inflater.inflate(R.layout.item, null); 

    if (isRetweeted == true) { 
     final String theRetweetedTxt = (String) data.get(position).get(12); 
     final String theRetweetedUser = (String) data.get(position).get(13); 
     final String theRetweetedImgUrl = (String) data.get(position).get(14); 
     final String theRetweetedScreenName = (String) data.get(position).get(15); 
     final Long rTiD = (Long) data.get(position).get(16); 
     final Integer rTtotalTweets = (Integer) data.get(position).get(17); 
     final Integer rTtotalFollowers = (Integer) data.get(position).get(18); 
     final Integer rTtotalFollowing = (Integer) data.get(position).get(19); 
     final Long rtTweetId = (Long) data.get(position).get(20); 


     TextView theTweet = (TextView) vi.findViewById(R.id.tweet_text); 
     TextView username = (TextView) vi.findViewById(R.id.username); 
     TextView realname = (TextView) vi.findViewById(R.id.realname); 
     TextView theTimeTv = (TextView) vi.findViewById(R.id.theTime); 

     ImageView aviimage = (ImageView) vi.findViewById(R.id.user_avatar); 
     ImageView image = (ImageView) vi.findViewById(R.id.imageView1); 
     ImageView retweeterimage = (ImageView) vi 
       .findViewById(R.id.retweeter_avatar); 
     ImageView replyImage = (ImageView) vi.findViewById(R.id.mentionbutton); 
     ImageView retweetImage = (ImageView) vi.findViewById(R.id.retweetbutton); 

     RelativeLayout profileImageLayout = (RelativeLayout) vi.findViewById(R.id.profileimagelayout); 

     profileImageLayout.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       Context context = v.getContext(); 
       Intent intent=new Intent(context, FriendProfileActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       intent.putExtra("theuserid", rTiD); 
       intent.putExtra("totaltweets", rTtotalTweets); 
       intent.putExtra("totalfollowers", rTtotalFollowers); 
       intent.putExtra("totalfollowing", rTtotalFollowing); 
       intent.putExtra("useravatar", theRetweetedImgUrl); 
       intent.putExtra("username", theRetweetedUser); 
       intent.putExtra("screenname", theRetweetedScreenName); 
       intent.putExtra("tweetid", rtTweetId); 

       context.startActivity(intent); 
      } 
     }); 

     image.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       Context context = v.getContext(); 
       Intent intent=new Intent(context, LightboxActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

       intent.putExtra("thetweet", theRetweetedTxt); 
       intent.putExtra("theimage", url); 
       intent.putExtra("theuserid", rTiD); 
       intent.putExtra("screenname", theRetweetedScreenName); 
       intent.putExtra("tweetid", rtTweetId); 


       context.startActivity(intent); 
      } 
     }); 

     replyImage.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       Context context = v.getContext(); 
       Intent intent=new Intent(context, TweetScreenActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       intent.putExtra("theuserid", rTiD); 
       intent.putExtra("screenname", theRetweetedScreenName); 
       intent.putExtra("tweetid", rtTweetId); 
       intent.putExtra("isretweet", false); 

       context.startActivity(intent); 
      } 
     }); 

     retweetImage.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) {     
       Context context = v.getContext(); 
       Intent intent=new Intent(context, TweetScreenActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       intent.putExtra("theuserid", rTiD); 
       intent.putExtra("screenname", theRetweetedScreenName); 
       intent.putExtra("tweetid", rtTweetId); 
       intent.putExtra("isretweet", true); 
       intent.putExtra("thetweet", theRetweetedTxt); 

       context.startActivity(intent); 
      } 
     }); 

     String str = (String) DateUtils.getRelativeTimeSpanString(theTime.getTime(), currentDate.getTime(), 
       0L, DateUtils.FORMAT_ABBREV_ALL); 

     theTimeTv.setText(str); 
     theTweet.setText(theRetweetedTxt); 
     username.setText("RT by @" + theScreenName); 
     realname.setText("@" + theRetweetedScreenName); 

     imageLoader.DisplayImage(theRetweetedImgUrl, aviimage); 
     imageLoader.DisplayImage(url, image); 
     imageLoader.DisplayImage(aviUrl, retweeterimage); 
     return vi; 
    } else { 
     TextView theTweet = (TextView) vi.findViewById(R.id.tweet_text); 
     TextView username = (TextView) vi.findViewById(R.id.username); 
     TextView realname = (TextView) vi.findViewById(R.id.realname); 
     TextView theTimeTv = (TextView) vi.findViewById(R.id.theTime); 

     ImageView aviimage = (ImageView) vi.findViewById(R.id.user_avatar); 
     ImageView image = (ImageView) vi.findViewById(R.id.imageView1); 
     ImageView replyImage = (ImageView) vi.findViewById(R.id.mentionbutton); 
     ImageView retweetImage = (ImageView) vi.findViewById(R.id.retweetbutton); 

     RelativeLayout profileImageLayout = (RelativeLayout) vi.findViewById(R.id.profileimagelayout); 

     profileImageLayout.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       Context context = v.getContext(); 
       Intent intent=new Intent(context, FriendProfileActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       intent.putExtra("theuserid", iD); 
       intent.putExtra("totaltweets", totalTweets); 
       intent.putExtra("totalfollowers", totalFollowers); 
       intent.putExtra("totalfollowing", totalFollowing); 
       intent.putExtra("useravatar", aviUrl); 
       intent.putExtra("username", theRealName); 
       intent.putExtra("screenname", theScreenName); 
       intent.putExtra("tweetid", tweetId); 

       context.startActivity(intent); 
      } 
     }); 

     image.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       Context context = v.getContext(); 
       Intent intent=new Intent(context, LightboxActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

       intent.putExtra("thetweet", theTweetText); 
       intent.putExtra("theimage", url); 
       intent.putExtra("theuserid", iD); 
       intent.putExtra("screenname", theScreenName); 
       intent.putExtra("tweetid", tweetId); 


       context.startActivity(intent); 
      } 
     }); 

     replyImage.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       Context context = v.getContext(); 
       Intent intent=new Intent(context, TweetScreenActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       intent.putExtra("theuserid", iD); 
       intent.putExtra("screenname", theScreenName); 
       intent.putExtra("tweetid", tweetId); 
       intent.putExtra("isretweet", false); 


       context.startActivity(intent); 
      } 
     }); 

     retweetImage.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) {     
       Context context = v.getContext(); 
       Intent intent=new Intent(context, TweetScreenActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       intent.putExtra("theuserid", iD); 
       intent.putExtra("screenname", theScreenName); 
       intent.putExtra("tweetid", tweetId); 
       intent.putExtra("isretweet", true); 
       intent.putExtra("thetweet", theTweetText); 

       context.startActivity(intent); 
      } 
     }); 

     ImageView retweeterimage = (ImageView) vi 
       .findViewById(R.id.retweeter_avatar); 
     retweeterimage.setImageBitmap(null); 

     String str = (String) DateUtils.getRelativeTimeSpanString(theTime.getTime(), currentDate.getTime(), 
       0L, DateUtils.FORMAT_ABBREV_ALL); 

     theTimeTv.setText(str); 
     theTweet.setText(theTweetText); 
     username.setText(theRealName); 
     realname.setText("@" + theScreenName); 

     imageLoader.DisplayImage(aviUrl, aviimage); 
     imageLoader.DisplayImage(url, image); 
     return vi; 
    } 

} 
+2

최종 변수로 인해 문제가 발생한다고 생각하지 않습니다. 인스턴스 변수와 같습니다. 내 생각 엔 다른 뭔가 잘못 됐어. – kosa

+3

4.0 이상 기기에서 앱이 다운되면 logcat을 게시하십시오. – Sam

+0

나는 또한 문제를 일으키는 최종 변수에 대해 헛소리를 호출하고 있습니다. Android 앱이 다운되는 것에 대해 게시 할 때 logcat을 게시하십시오. –

답변

3

'마지막'키워드가 아무 영향을 미치지 않습니다 갈 것입니다.

관련 문제